Вызов XCreateColormap создает ошибку сегментации

По какой-то причине мой вызов XCreateColormap в XLib вызывает ошибку сегментации. Самое смешное, что большая часть кода, который я использовал, почти идентична коду, который я видел в сети, который показывает, как создать окно и контекст OpenGL, используя XLib и GLX.

Что касается деталей, у меня есть структура с именем 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 дал мне некоторые результаты о других людях, столкнувшихся с ошибками сегментации из-за этого вызова функции, ни у кого из них не было даже похожей причины. помоему для этого случая.

Если это что-то значит, я использую GLX 1.4 и OpenGL 4.2.


person zeboidlund    schedule 28.02.2012    source источник
comment
Пробовали запускать в отладчике? Затем вы увидите, где именно происходит сбой, и сможете изучить переменные. Выполните поиск в Google по запросу gdb tutorials, чтобы узнать, как использовать самый распространенный отладчик в системах UNIX/Linux.   -  person Some programmer dude    schedule 28.02.2012
comment
Укажите SSCCE.   -  person n. 1.8e9-where's-my-share m.    schedule 28.02.2012
comment
@JoachimPileborg да, если бы вы прочитали все это, вы бы знали, что я уже запустил свой отладчик для этого.   -  person zeboidlund    schedule 29.02.2012
comment
можете ли вы предоставить трассировку запросов X от xtrace (xtrace.alioth.debian.org) или xscope ( cgit.freedesktop.org/xorg/app/xscope )   -  person Andrey Sidorov    schedule 29.02.2012
comment
@н.м. Ну, мой согласен, что это так. Ваш комментарий не помогает решить проблему, например, потому что я уже скомпилировал это. По сути, вы просите меня опубликовать весь заголовочный файл вместе с исходным файлом, что не имеет смысла, поскольку выходит за рамки исходной проблемы.   -  person zeboidlund    schedule 29.02.2012


Ответы (1)


Ошибка сегментации произошла из-за того, что я выделил XSetWindowAttributes как указатель на адрес. Проблема была решена, когда вместо этого я решил выделить его в стеке.

Считайте этот вопрос решенным.

person zeboidlund    schedule 28.02.2012
comment
Аааа! Спасибо, что опубликовали решение... Это так странно, но у меня сработало. - person monokrome; 03.07.2017