调用XCreateColormap创建分段错误

时间:2012-02-28 02:16:22

标签: c opengl x11 glx

出于某种原因,我在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实现。

有人可以对此有所了解吗?我需要信息,虽然谷歌搜索给了我一些其他人在这个函数调用中遇到seg-fault的结果,但他们都没有因为这种情况甚至与我的相似。

如果有意义,我正在运行GLX 1.4和OpenGL 4.2

1 个答案:

答案 0 :(得分:1)

分段错误发生在我将XSetWindowAttributes分配为指向地址的指针的事实中。当我选择在堆栈上分配它时,问题就解决了。

请考虑解决此问题。