前提・実現したいこと
DXライブラリを用いた2Dゲームを作っています。
ゲーム終了(メイン関数のreturn)時のデストラクタの付近でアクセス違反、または例外が発生します。
発生している問題・エラーメッセージ
0x004C7576 で例外がスローされました (GameFrame2D.exe 内): 0xC0000005: 場所 0xC0000008 の読み取り中にアクセス違反が発生しました
↓連続で実行したときはこっちになることがある(法則性、原因不明)
GameFrame2D.exe によってブレークポイントが発生しました。
該当のソースコード
Map.h
const int MAP_HEIGHT = 15;
const int MAP_WIDTH = 20;
private:
char _stageData[MAP_HEIGHT][MAP_WIDTH];
Map.cpp
std::string stageNum = std::to_string(GameManager::getInstance().getStageNum()); std::string path = "res/stage/stage" + stageNum + ".csv"; // CSVファイルの読み込み int fileHandle = FileRead_open(path.c_str(), false); // CSVファイルの内容をstageDataに格納 for (int row = 0; row < MAP_HEIGHT; row++) { int line = 0; while (1) { char c = FileRead_getc(fileHandle); if (c == '\n') { break; } else if (c != ',') { _stageData[row][line] = c;//ここをコメントアウトするとエラーが起きない line++; } } }
試したこと
以下の状態でゲームを終了した結果
1._stageDataを使用している個所を宣言含め上記2か所のみにする → エラー発生
2. 2の状態から_stageData[row][line]の部分をコメントアウトする → エラー発生しない
よって原因は_stageDataにあると考えました。
_stageDataが二重配列なのが原因なのかと考え、通常の配列にしてみたのですが結果は変わりませんでした。
また、Map.cppの_stageDataにCSVのデータを格納する処理を
_stageData[0][0] = '1';
_stageData[0][1] = '1';
…
_stageData[14][19] = '1';
というように直接入力するようにしたところ、エラーは発生しませんでした。
なのでCSVファイルのデータを_stageDataに格納していたことが原因ではないかと思われます。
なお、ゲームプレイ中のエラーは今のところ確認されていないです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/29 14:33