出于某种原因,我在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
答案 0 :(得分:1)
分段错误发生在我将XSetWindowAttributes
分配为指向地址的指针的事实中。当我选择在堆栈上分配它时,问题就解决了。
请考虑解决此问题。