リリース実行可能ファイルのみを実行すると(Visual Studioで実行しても問題は発生しません)、プログラムがクラッシュします。「プロセスにアタッチ」機能を使用すると、VisualStudioは次の機能でクラッシュが発生したことを示します。
World::blockmap World::newBlankBlockmap(int sideLen, int h){
cout << "newBlankBlockmap side: "<<std::to_string((long long)sideLen) << endl;
cout << "newBlankBlockmap height: "<<std::to_string((long long)h) << endl;
short*** bm = new short**[sideLen];
for(int i=0;i<sideLen;i++){
bm[i] = new short*[h];
for(int j=0;j<h;j++){
bm[i][j] = new short[sideLen];
for (int k = 0; k < sideLen ; k++)
{
bm[i][j][k] = blocks->getAIR_BLOCK();
}
}
}
return (blockmap)bm;
}
これは子クラスから呼び出されます...
World::chunk* World_E::newChunkMap(World::floatmap north, World::floatmap east, World::floatmap south, World::floatmap west
,float lowlow, float highlow, float highhigh, float lowhigh, bool displaceSides){
World::chunk* c = newChunk(World::CHUNK_SIZE+1,World::HEIGHT);
for (int i = 0; i < World::CHUNK_SIZE ; i++)
{
for (int k = 0; k < World::CHUNK_SIZE ; k++)
{
c->bm[i][0][k] = blocks->getDUMMY_BLOCK();
}
}
c->bm[(int)floor((float)(World::CHUNK_SIZE+1)/2.0f)-1][1][(int)floor((float)(World::CHUNK_SIZE+1)/2.0f)-1] = blocks->getSTONE_BLOCK();
c->bm[(int)ceil((float)(World::CHUNK_SIZE+1)/2.0f)-1][1][(int)floor((float)(World::CHUNK_SIZE+1)/2.0f)-1] = blocks->getSTONE_BLOCK();
c->bm[(int)floor((float)(World::CHUNK_SIZE+1)/2.0f)-1][1][(int)ceil((float)(World::CHUNK_SIZE+1)/2.0f)-1] = blocks->getSTONE_BLOCK();
c->bm[(int)ceil((float)(World::CHUNK_SIZE+1)/2.0f)-1][1][(int)ceil((float)(World::CHUNK_SIZE+1)/2.0f)-1] = blocks->getSTONE_BLOCK();
return c;
}
どこ...
class World {
public: typedef short*** blockmap;
...
VSが指す線は...
short*** bm = new short**[sideLen];
「プロセスにアタッチ」関数は、ローカル変数を統計します... sideLen = 1911407648 h = 0これは私が予期していなかったものですが、coutはそれぞれ9と30を出力します。
ほとんどの「リリースのみでのクラッシュ」の問題は初期化されていない変数が原因であることに気づいていますが、ここで関連する問題はわかりません。
私が受け取る唯一のエラーメッセージは...WindowsがBlocksProject.exeでブレークポイントをトリガーしました。これは、ヒープの破損が原因である可能性があります
私はこの問題に困惑しています、エラーは何ですか?リリース実行可能ファイルをより適切にデバッグするにはどうすればよいですか?
必要に応じてさらにコードを投稿できますが、コードがたくさんあることを覚えておいてください。
よろしくお願いします。
「そして、コードの2番目のチャンクから呼び出されたWorld :: newBlankBlockmap()が表示されません。– Michael Burr」、そのビットを忘れました。
World::chunk* World::newChunk(int side, int height){
cout << "newChunk side: "<<std::to_string((long long)side) << endl;
cout << "newChunk height: "<<std::to_string((long long)height) << endl;
chunk* ch = new chunk();
ch->bm = newBlankBlockmap(side,height);
ch->fm = newBlankFloatmap(side);
return ch;
}
どこ...
struct chunk {
blockmap bm;
floatmap fm;
};
ワールドクラスで定義されているように