仅运行发布可执行文件时(通过 Visual Studio 运行时不会出现问题)我的程序崩溃。使用“附加到进程”功能时,Visual Studio 指示崩溃发生在以下功能中:
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 在 Blocks Project.exe 中触发了一个断点。这可能是由于堆损坏
我被这个问题难住了,错误是什么?我怎样才能更好地调试发布可执行文件?
如果需要,我可以发布更多代码,但是,请记住其中有很多。
提前谢谢你。
“而且我没有看到 World::newBlankBlockmap() 从第二块代码中调用。-迈克尔伯尔”,我忘了那一点,给你......
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;
};
定义在世界级