c++代码中接收分段错误
Receiving segmentation fault in C++ code
我正在使用c++, code::blocks(启用了警告并检查了以确保)和SFML。
我试着自己去找这个bug,但我真的找不到问题所在。我知道段断层是什么意思,但这个真的把我难住了。我是初学者,但我学得很快。
我有一个基本的主类void Engine
,它有一个方法void RenderFrame
,渲染应用程序的每一帧。在这个方法中,我有这段代码用来绘制所有的tile到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 *> >
中返回一个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:CodingC++sfmlbindebugsfml-graphics.dll:??)
#1 004021F9 Tile::Draw(this=0x76ab8cd5, x=0, y=0, pWnd=0x3e3310) (D:CodingC++sfmlincludeTile.cpp:12)
#2 00401D7E Engine::RenderFrame(this=0x3e3298) (D:CodingC++sfmlincludeEngine.cpp:106)
#3 00401B29 Engine::MainLoop(this=0x3e3298) (D:CodingC++sfmlincludeEngine.cpp:63)
#4 00401E27 _fu0___ZTIPKc(this=0x3e3298) (D:CodingC++sfmlincludeEngine.cpp:119)
#5 004022D6 main() (D:CodingC++sfmlMain.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 *> >
已经损坏了。
最可能的解释是currentLevel->GetTile(x,y)
返回的指针无效。这可能是因为它没有正确初始化(初始化为NUL或一个有效的已分配对象),或者是因为它所引用的对象已被销毁。两者都会解释sprite
不是一个有效的对象,并且在该对象上调用SetPosition
将传递一个无效的this
指针,从而触发SIGSEGV。
段错误的一般原因是对空指针或无效指针的解引用。
1. 检查GetTile()是否导致了错误?
2. 解引用前检查currentLevel
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?