При запуске только исполняемого файла релиза (при запуске через 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];
Функция "прикрепить к процессу" stats Локальные переменные ...
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;
};
как определено в Мировом классе