我正在尝试执行递归泛洪填充算法,并且正在将参数传递给某些数据结构的指针。在算法运行的某个时刻,指针似乎丢失了。我不知道为什么。
代码说明: 首先,算法检查块溢出,这意味着需要基于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的指针无效。任何指向块的指针的想法都会丢失吗?
谢谢
答案 0 :(得分:0)
我已经弄清楚了,它是与堆栈相关的,很难再现的问题,因此不需要更深入的解释。那个Chunk * chunk = _chunk我只是尝试了一下,还没有删除所有过时的代码。