使用 SDL_CreateWindow 时出现 SDL OpenGL 分段错误

Posted

技术标签:

【中文标题】使用 SDL_CreateWindow 时出现 SDL OpenGL 分段错误【英文标题】:SDL OpenGL segmentation fault when using SDL_CreateWindow 【发布时间】:2017-03-27 13:34:19 【问题描述】:

我遇到了一个奇怪的问题,它突然出现在我正在进行的所有项目中。我正在使用 C++、SDL2 和 OpenGL,在我的 int main 中发生的第一件事就是创建一个带有 OpenGL 标志的 SDL 窗口,如下所示:

int main( int argc, char* args[] )

    //Minor stuff here e.g. initialising SDL
    mainwindow = SDL_CreateWindow("...", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL);

由于某种原因,这已开始导致分段错误。如果我将标志从 SDL_WINDOW_OPENGL 更改为其他任何内容,它确实会创建一个窗口,但由于缺少 OpenGL 上下文可做任何事情,显然很快就会失败。除了 SDL 和 OpenGL 初始化的东西,我已经把所有代码都去掉了,但它仍然失败并出现段错误。

从今天开始,这个问题已经在两个共享相同基本 int 主结构的项目中开始。这让我相信这不是代码问题(主要是因为代码实际上并没有改变),而是我的设置/环境出了问题。到目前为止,我尝试了以下方法无济于事:

重新下载最新的 SDL 库 重新下载最新的 GLEW 库 重新安装的代码块

对于 a) 可能导致此问题的原因和 b) 我应该从哪里开始寻找解决它的任何想法?

谢谢

内森

【问题讨论】:

你确实调用了“SDL_Init(SDL_INIT_VIDEO)”? 我调用 SDL_Init(SDL_INIT_EVERYTHING) - 也尝试使用 SDL_INIT_VIDEO(没有变化),并且还验证了 SDL 已使用 SDL_WasInit 正确初始化 - 一切似乎都很好 【参考方案1】:

就像生活中的许多其他问题一样,答案原来是司机。某种系统范围的更新干扰了图形渲染任何类型 OpenGL 的能力。直接下载并安装最新的图形驱动程序即可解决此问题。

【讨论】:

在我的情况下,这是因为我的程序中存在close() 函数。只需将其重命名为close1(),一切正常。很奇怪。

以上是关于使用 SDL_CreateWindow 时出现 SDL OpenGL 分段错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 %s 时出现不支持的操作数类型错误

使用 <@s.generator 和迭代器标签时出现“Freemarker 模板错误”

在 C 中使用 free() 时出现无效(中止)核心转储错误

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

s-s-rS 2008 - 导出为 pdf 时出现多个报告页面差异

调用printf%s时出现分段错误