调用XCreateColormap创建分段错误

调用XCreateColormap创建分段错误,c,opengl,x11,glx,C,Opengl,X11,Glx,出于某种原因,我在XLib中调用XCreateColormap时出现了分段错误。有趣的是,我使用的大多数代码与我在网上看到的代码几乎相同,这些代码展示了如何使用XLib和GLX创建窗口和OpenGL上下文 在细节方面,我有一个名为OVI_UnixDisplayData的结构,它基本上充当用于创建窗口并为其分配上下文的所有相关X窗口/GLX数据的容器。我最初有一个函数,用于创建上下文,然后返回指向该数据结构的指针。该结构仅被称为dat(用于数据) 分段故障的发生 dat->fbConfigs

出于某种原因,我在XLib中调用
XCreateColormap
时出现了分段错误。有趣的是,我使用的大多数代码与我在网上看到的代码几乎相同,这些代码展示了如何使用XLib和GLX创建窗口和OpenGL上下文

在细节方面,我有一个名为
OVI_UnixDisplayData
的结构,它基本上充当用于创建窗口并为其分配上下文的所有相关X窗口/GLX数据的容器。我最初有一个函数,用于创建上下文,然后返回指向该数据结构的指针。该结构仅被称为
dat
(用于数据)

分段故障的发生

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 );
dat->fbConfigs=glXChooseFBConfig(dat->display,DefaultScreen(dat->display),visualAttr,&dat->framebuffCount);
如果(!dat->fbConfigs | | dat->framebuffCount<1)
{
put(OVI_ERR_GLX_FRAME_BUF_CFG);
出口(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->显示,
根窗口(dat->display,dat->visualinfo->screen),
dat->visualinfo->visual,ALLOCONE);
我已经检查了我自己的GLX版本,它们以1.4的形式返回,所以这不会是问题所在。在此基础上,在我的调试器中,我知道
dat->visualinfo->visual->ext_data
包含0x0的值,因此如果这与此有关,我不会感到惊讶。问题是,我不知道如何(如果有的话),也不知道调用什么函数来正确初始化它,因为它的行为似乎更像是链表的C类实现

有人能解释一下吗?我需要信息,虽然谷歌搜索给了我一些关于其他人在函数调用中遇到seg故障的结果,但他们中没有一个人有类似的原因


如果它有什么意义的话,我正在运行GLX 1.4和OpenGL 4.2,分段错误发生在我将
XSetWindowAttributes
分配为指向地址的指针这一事实上。当我选择在堆栈上分配它时,问题得到了解决


认为此问题已解决。

您是否尝试在调试器中运行它?然后,您将看到它崩溃的确切位置,并能够检查变量。在Google上搜索
gdb教程
,了解如何在UNIX/Linux系统中使用最常用的调试器。请提供。@JoachimPileborg是的,如果你通读了全部内容,你就会知道我已经在这上面运行了我的调试器。你能提供来自xtrace()或xscope()@n.m的X请求的跟踪吗?我同意这一点。首先,你的评论对这个问题没有帮助,因为我已经编译过了。你要求我发布整个头文件和源文件,这没有意义,因为这超出了原始问题的范围。啊!感谢您发布解决方案。。。这很奇怪,但对我来说很有效。