【问题标题】:Call to XCreateColormap Creates Segmentation Fault调用 XCreateColormap 创建分段错误
【发布时间】: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-&gt;visualinfo-&gt;visual-&gt;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.好吧,我的同意是这样的。你的评论对这个问题没有帮助,一方面,因为我已经编译了这个。您的要求本质上是让我发布整个头文件以及源文件,这没有意义,因为这超出了原始问题的范围。

标签: c opengl x11 glx


【解决方案1】:

发生分段错误是因为我将XSetWindowAttributes 分配为指向地址的指针。当我选择在堆栈上分配它时,这个问题得到了解决。

认为此问题已解决。

【讨论】:

  • 啊啊啊!感谢您发布解决方案...这很奇怪,但对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2017-03-17
  • 2015-01-08
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多