C++ SDL 分段错误

Posted

技术标签:

【中文标题】C++ SDL 分段错误【英文标题】:C++ SDL segmentation fault 【发布时间】:2012-05-12 15:26:54 【问题描述】:

我让我的游戏正常运行,然后决定尝试使用以下 tutorial 实现一个菜单。

我没有使用教程来创建他之前创建的教程中的游戏。

每当我编译并运行程序时,它会短暂加载,然后关闭并在code::blocks 的构建日志中显示Process terminated with status 3 (0 minutes, 1 seconds)

更新:我已将 pastebin 链接的代码更新为我现在所拥有的,我现在从调试器得到的错误是

Program received signal SIGSEGV, Segmentation fault.
In TTF_SizeUNICODE () (E:\game\pong\bin\Debug\SDL_ttf.dll)
At E:\game\pong\main.cpp:27

更新 2:我尴尬地没有安装字体。我已经安装了字体,现在调试器到达屏幕显示“开始”和“退出”字体的位置,但是,在执行此操作后程序立即冻结,调试器中没有错误,并且如果我正常运行程序,它只是在显示文本后停止响应,奇怪。从code::blocks启动程序后强行关闭窗口后才发现,返回这个:Process terminated with status -805306369 (0 minutes, 13 seconds)

更新 3:已解决。

【问题讨论】:

请自行缩小您的问题范围,必要时使用调试器,如果您仍然卡住,请在此处发布相关代码。 【参考方案1】:

在将 screen(第 220 行)传递给 showMenu(第 224 行)之前,您没有初始化它。 AFAIK SDL_SetVideoMode 返回一个可用于 screen 的表面。

【讨论】:

恐怕我不完全理解,我已经移动了“SDL_Surface* 屏幕;TTF_Font* 字体;”到 showMenu 之前,但对于 SetVideoMode,我应该复制我现有的“SDL_SetVideoMode(600,400,32, SDL_OPENGL);”从第 172 行到更早的位置,例如第 12 行(在 showMenu 之前)?非常感谢您的回复!谢谢你的帮忙! :) 我说的是初始化而不是声明。第 168 行应该是screen = SDL_SetVideoMode(600,400,32, SDL_OPENGL ); 我已更改第 168 行,但错误仍然存​​在。如果您想检查,我已将 pastebin 链接更新到当前编码:) 调试器仍然在同一行抛出相同的错误。 “程序收到信号 SIGSEGV,分段错误。在 E:\game\pong\main.cpp:31”谢谢你的帮助,我对 c++ 很陌生,正如你所说,我不太擅长然而,但希望变得更好! 我已将 pastebin 链接的代码更新为我现在所拥有的,我现在从调试器得到的错误是程序收到信号 SIGSEGV,分段错误。在 TTF_SizeUNICODE () (E:\game\pong\bin\Debug\SDL_ttf.dll) 在 E:\game\pong\main.cpp:27 像往常一样,任何回复表示赞赏,谢谢。 @JohnSmith 可能是您需要先安装字体。

以上是关于C++ SDL 分段错误的主要内容,如果未能解决你的问题,请参考以下文章

调用 SDL_SetVideoMode 时出现分段错误

C++:当我添加看似无关的代码行时,分段错误消失了

分段错误:在 C++ 中弹出向量时出现 11

指针数组 C++ 的分段错误

C++ 分段错误 OpenCV

在 C++ 中使用向量时出现分段错误