【发布时间】:2012-02-29 06:50:40
【问题描述】:
出于某种原因,我在 XLib 中对 XCreateColormap 的调用给了我一个分段错误。有趣的是,我使用的大部分代码与我在网上看到的代码几乎相同,该代码展示了如何使用 XLib 和 GLX 创建窗口和 OpenGL 上下文。
在细节方面,我有一个名为 OVI_UnixDisplayData 的结构,它基本上充当所有相关 X Window/GLX 数据的容器,用于创建窗口并为其分配上下文。我最初有一个函数,旨在创建一个上下文,然后返回一个指向该数据结构的指针。该结构仅称为dat(用于数据)。
SegFault 发生
dat->fbConfigs = glXChooseFBConfig( dat->display, DefaultScreen( dat->display ), visualAttr, &dat->framebuffCount );
if ( !dat->fbConfigs || dat->framebuffCount < 1 )
{
puts( OVI_ERR_GLX_FRAME_BUF_CFG );
exit( 1 );
}
printf( OVI_STAT_GLX_FRAME_BUFF_CFG_COUNT, dat->framebuffCount );
dat->visualinfo = glXGetVisualFromFBConfig( dat->display, dat->fbConfigs[ dat->fbCountId ] );
printf( OVI_STAT_GLX_FRAME_BUFF_VIS_ID, dat->visualinfo->visualid );
puts( OVI_STAT_X_COLORMAP_CREATE );
dat->setwinatt->colormap = XCreateColormap(
dat->display,
RootWindow( dat->display, dat->visualinfo->screen ),
dat->visualinfo->visual, AllocNone );
我检查了我自己的 GLX 版本, 返回为 1.4,所以这不是问题。最重要的是,在我的调试器中,我知道 dat->visualinfo->visual->ext_data 的值是 0x0,所以如果这与它有关,我不会感到惊讶。问题是我不知道如何(如果有的话),而且我不知道要调用什么函数来正确初始化它,因为它的行为似乎更像是链表的类 C 实现。
有人可以对此有所了解吗?我需要信息,虽然 Google 搜索给了我一些关于其他人遇到此函数调用的 seg-fault 的结果,但他们都没有发生这种情况的原因甚至与我的相似。
如果这意味着什么,我正在运行 GLX 1.4 和 OpenGL 4.2
【问题讨论】:
-
你试过在调试器中运行它吗?然后,您将准确看到崩溃的位置,并能够检查变量。在 Google 上搜索
gdb tutorials,了解如何使用 UNIX/Linux 系统中最常见的调试器。 -
请提供SSCCE。
-
@JoachimPileborg 是的,如果您阅读了整个内容,您就会知道我已经在此运行了我的调试器。
-
您能否提供来自 xtrace (xtrace.alioth.debian.org) 或 xscope (cgit.freedesktop.org/xorg/app/xscope) 的 X 请求跟踪
-
@n.m.好吧,我的同意是这样的。你的评论对这个问题没有帮助,一方面,因为我已经编译了这个。您的要求本质上是让我发布整个头文件以及源文件,这没有意义,因为这超出了原始问题的范围。