我正在使用C ++,code :: blocks(启用了警告,并且已经检查确认)和SFML。

我已经尝试过自己寻找漏洞,但是我真的找不到问题所在。我知道段错误是什么意思,但这确实使我难过。我是一个初学者,可以补充,但是正在快速学习。

我有一个基本的主类void Engine,它具有方法void RenderFrame来呈现应用程序的每一帧。在上述方法中,我有以下代码,应该将所有图块绘制到renderwindow上:

Tile* tile;
for (short y = 0; y < mapHeight; ++y) {
    for (short x = 0; x < mapWidth; ++x) {
        tile    = currentLevel -> GetTile(x, y);

        if (tile) {
            tile -> Draw((x * tileSize), (y * tileSize), Wnd);
        }
    }
}


应该使用GetTile方法从std::vector<std::vector<Tile *> >中返回图块

Draw方法仅这样做:

void Tile::Draw(int x, int y, sf::RenderWindow *pWnd) {
    sprite.SetPosition(x, y);
    pWnd -> Draw(sprite);
}


该应用程序编译正常,但在调用sprite.SetPosition(x, y);后立即崩溃

这是调试器的完整调用堆栈:

#0 68701829 sf::Drawable::SetPosition(float, float) () (D:\Coding\C++\sfml\bin\debug\sfml-graphics.dll:??)
#1 004021F9 Tile::Draw(this=0x76ab8cd5, x=0, y=0, pWnd=0x3e3310) (D:\Coding\C++\sfml\include\Tile.cpp:12)
#2 00401D7E Engine::RenderFrame(this=0x3e3298) (D:\Coding\C++\sfml\include\Engine.cpp:106)
#3 00401B29 Engine::MainLoop(this=0x3e3298) (D:\Coding\C++\sfml\include\Engine.cpp:63)
#4 00401E27 _fu0___ZTIPKc(this=0x3e3298) (D:\Coding\C++\sfml\include\Engine.cpp:119)
#5 004022D6 main() (D:\Coding\C++\sfml\Main.cpp:8)


我希望这是足够的信息,在此先感谢。

编辑:哦,这是从调试器的输出。 Program received signal SIGSEGV, Segmentation fault.In sf::Drawable::SetPosition(float, float) ()
没有提供有关该问题的更多信息。

最佳答案

回溯中的这一行看起来可疑:

#1 004021F9 Tile::Draw(this=0x76ab8cd5, x=0, y=0, pWnd=0x3e3310)


这似乎与您的Tile :: Draw函数相对应,只是this指针未对齐,这表明它不是有效的指针。因此,也许您的std::vector<std::vector<Tile *> >已被损坏。

关于c++ - 在C++代码中接收段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7909244/

10-12 23:52