[英]Pointer seems to be getting lost in recursive algorythm
我正在嘗試進行遞歸泛洪填充算法,並且我將指針傳遞給參數中的某些數據結構。 在算法運行的某個時刻,指針似乎丟失了。 我不知道為什么。
代碼說明:首先algorythm檢查塊溢出,這意味着需要保存舊塊並基於X和Y加載新塊。接下來是塊結構中的一些數據的替換,然后是遞歸函數調用。
bool WorldGenerator::floodFillStep(int _x, int _y, int _target, int _replacement, Chunk* _chunk)
{
Chunk* chunk = _chunk;
if (_x < (xSize * CHUNK_WIDTH) && _y < (ySize * CHUNK_HEIGHT))
{
int x = _x % CHUNK_WIDTH,
y = _y % CHUNK_HEIGHT,
X = _x / CHUNK_WIDTH,
Y = _y / CHUNK_HEIGHT;
//check for chunk spill
if ((floodLastX / CHUNK_WIDTH) < X)
{
chunk->save();
std::string path = "maps/" + std::to_string(X) + std::to_string(Y) + ".map";
chunk->load(path, X, Y);
}
else if ((floodLastY / CHUNK_HEIGHT) < Y)
{
chunk->save();
std::string path = "maps/" + std::to_string(X) + std::to_string(Y) + ".map";
chunk->load(path, X, Y);
}
else if ((floodLastX / CHUNK_WIDTH) > X)
{
chunk->save();
std::string path = "maps/" + std::to_string(X) + std::to_string(Y) + ".map";
chunk->load(path, X, Y);
}
else if ((floodLastY / CHUNK_HEIGHT) > Y)
{
chunk->save();
std::string path = "maps/" + std::to_string(X) + std::to_string(Y) + ".map";
chunk->load(path, X, Y);
}
floodLastX = _x;
floodLastY = _y;
//replacement
if (chunk->getTile(x, y)->getType() == _target)
{
if (x < 40 && y < 40 && x >= 0 && y >= 0)
{
chunk->getTile(x, y)->setType(_replacement);
chunk->getTile(x, y)->setMod(255);
//_chunk->save();
floodFillStep(_x + 1, _y, _target, _replacement, chunk);
floodFillStep(_x, _y + 1, _target, _replacement, chunk);
floodFillStep(_x - 1, _y, _target, _replacement, chunk);
floodFillStep(_x, _y - 1, _target, _replacement, chunk);
}
}
}
return true;
}
在某些時候,拋出了與Chunk實例中的std :: vector相關的異常,當我檢查局部變量時,指向Chunk的指針無效。 指向塊的指針可能會丟失的任何想法?
謝謝
我已經弄清楚了,這是堆棧相關的,幾乎不可重現的問題所以不需要更深入的解釋。 Chunk * chunk = _chunk我只是嘗試了一些東西,並沒有刪除所有過時的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.