簡體   English   中英

指針似乎在遞歸的algorythm中迷失了

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM