オブジェクトの動的確保について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
うん

オブジェクトの動的確保について

#1

投稿記事 by うん » 9年前

これでエラーが出ないのが不思議なんですが

enum a{
C_TYPE_PLAYER,
B_TYPE_PLAYER,
D_TYPE_PLAYER,
};

Character* character;

character = new Character[IMAGE_MAX];

delete[] character;


character[C_TYPE_PLAYER].initialize(~);

この

character[C_TYPE_PLAYER]->initialize(~);

この部分を アロー演算子でアクセス出来ないのはなぜでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: オブジェクトの動的確保について

#2

投稿記事 by みけCAT » 9年前

C++の場合、character[C_TYPE_PLAYER]はCharacter型であってポインタではなく、かつCharacter型でアロー演算子がオーバーロードされていないからでしょう。
characterが指す配列は既にdeleteされているからです。
deleteされたものにアクセスしてはいけません。

うん さんが書きました:これでエラーが出ないのが不思議なんですが
本当に不思議ですね。
詳しく調べてはいませんが、多分未定義でしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

うん

Re: オブジェクトの動的確保について

#3

投稿記事 by うん » 9年前

回答ありがどうございます。

もうすこし詳しく書くと


//グローバル
Character* charcter;

int main(){
while(ゲームループ){

character = new Character[IMAGE_MAX] ;

switch( game_mode){
case 1:
maingame();
break;
}

}
delete[] character;
}

int maingame(){

if( (character[T_TYOE_TYTLE].initialize()) == false){
return -1;
}
}

こんな感じです ここで
character[T_TYOE_TYTLE].initialize() が アロー演算子でアクセス出来ないんです

指す必要がないからでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: オブジェクトの動的確保について

#4

投稿記事 by みけCAT » 9年前

character[C_TYPE_PLAYER]はCharacter型であってポインタではなく、かつCharacter型でアロー演算子がオーバーロードされていないからでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る