ページ 11

C++でおこったアクセスエラー

Posted: 2016年3月14日(月) 17:15
by つくばさん
c++でエラーが発生し解決方法がわからなかったため質問させていただきます。
今回 VC++2010コードを組んでいたら次のところでアクセスエラーが発生しました。
エラーは次のようです

Test.exe の 0x005e7c66 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xcdcdcdcd に書き込み中にアクセス違反が発生しました。

コード:

PlayerShotMgr::Init(){
for(int i=0;i<300;i++){
PlayerShot[i]=nullptr;//ここでエラー
}
}
PlayerShotMgrは次のように宣言しています。

コード:


class PlayerShotMgr{
private:
CPlayerShot* mPlayerShot[300];
public :
void Update();
void Draw();
void Init();
void Fin();
}
CPlayerShotがおかしいのと思いint型に変えても変わりませんでした。
nullptrをうまく代入するにはどうすればよいのでしょうか。
c++,プログラミング共に初心者ですがご協力お願いします。
PCにはあまりさわれないので返信は遅くなります。すみません

Re: C++でおこったアクセスエラー

Posted: 2016年3月14日(月) 19:01
by プラム
つくばさん さんが書きました:c++でエラーが発生し解決方法がわからなかったため質問させていただきます。
今回 VC++2010コードを組んでいたら次のところでアクセスエラーが発生しました。
エラーは次のようです

Test.exe の 0x005e7c66 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xcdcdcdcd に書き込み中にアクセス違反が発生しました。
インデントがされてませんがそれは置いといて。

そのエラーは、コンパイルエラーは出ないが、常識の範囲では実行できないコードが実行されたときに強制終了され、それと同時に出るエラーだと思います。
つくばさん さんが書きました: rは次のように宣言しています。

コード:


class PlayerShotMgr{
private:
CPlayerShot* mPlayerShot[300];
public :
void Update();
void Draw();
void Init();
void Fin();
}
[/quote][/quote]

このクラスの中に「PlayerShot」という値は有りませんが、どこにあります?
それと。nullptrではなく、NULLにしてみたらどうですか?

僕はC言語はわかりますが、C++は少ししか触れないのでこれくらいのアドバイスしかできません、すみません。

Re: C++でおこったアクセスエラー

Posted: 2016年3月14日(月) 19:36
by つくばさん
ノウルさんありがとうございます。
すみませんコードは本来

コード:

class PlayerShotMgr{
private:
CPlayerShot* PlayerShot[300];//mは必要ありませんでした。
public :
void Update();
void Draw();
void Init();
void Fin();
}
また
NULLを入れても結果に変わりはありませんでした。
ポインタでなく

コード:

PlayerShotMgr::Init(){
test=0;
}

コード:

class PlayerShotMgr{
private:
int test;
public :
void Update();
void Draw();
void Init();
void Fin();
}
としても同じ現象が起こりました。
どういうことなのでしょう?

Re: C++でおこったアクセスエラー

Posted: 2016年3月14日(月) 21:21
by tk-xleader
PlayerShotMgr::Initを呼んでいる側に問題があるのではないでしょうか?
たぶん、未初期化のPlayerShotMgr*型の変数でInitを呼び出している箇所があると思います。そこに適切な初期化を施せば直るでしょう。

Re: C++でおこったアクセスエラー

Posted: 2016年3月16日(水) 12:54
by つくばさん
tk-xleaderさん ありがとうございました、
class を持っている奴の初期化で class の初期化をわすれていました
初期化したら無事直りました。
ポインタを使うときは初期化を忘れないということで解決にさせていただきます。
みなさんありがとうございました。