首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >指针似乎在递归算法中丢失了

指针似乎在递归算法中丢失了
EN

Stack Overflow用户
提问于 2019-04-09 03:22:35
回答 1查看 40关注 0票数 -1

我正在尝试做递归泛洪填充算法,并且我在参数中传递了指向一些数据结构的指针。在算法运行的某个时刻,指针似乎丢失了。我不知道为什么。

代码说明:首先algorythm检查块溢出,这意味着需要保存旧块并加载新块,基于X和Y。下一步是替换块结构中的一些数据,然后是递归函数调用。

代码语言:javascript
复制
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的指针无效。当指向块的指针可能丢失时,你有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-04-10 03:41:52

我已经弄清楚了,这是与堆栈相关的,几乎不能重现的问题,所以不需要更深入的解释。那个Chunk* chunk = _chunk我只是在尝试一些东西,并没有删除所有过时的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55580428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档