2012-02-28 3 views
0

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

Что касается деталей, у меня есть структура, называемая 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, так что не может быть проблемой. Ontop этого, в моем отладчике, я знаю, что dat->visualinfo->visual->ext_data содержит значение 0x0, поэтому я не удивлюсь, если это что-то с этим связано. Проблема в том, что я не знаю, как (если вообще), и я не знаю, какую функцию вызывать, чтобы правильно ее получить , поскольку его поведение, похоже, больше похоже на C-подобную реализацию связанный список.

Может кто-то пролить свет на это? Мне нужна информация, и, хотя поиск в Google дал мне некоторые результаты для других людей, испытывающих seg-faults от этого вызова функции, ни у одного из них не было причин, даже похожих на мои для этого.

Если это означает, что что-нибудь, я бегу GLX 1.4 и OpenGL 4.2

+1

Вы пытались запустить его в отладчике? Затем вы увидите, где он сработает, и вы сможете исследовать переменные. Сделайте поиск Google для 'gdb tutorials', чтобы узнать, как использовать наиболее распространенный отладчик в системах UNIX/Linux. –

+1

Просьба представить [SSCCE] (http://sscce.org/). –

+0

@JoachimPileborg да, если вы прочтете все, что знаете, я уже запустил свой отладчик. – zeboidlund

ответ

1

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

Рассмотрите эту проблему.

+0

Aaaah! Спасибо за публикацию решения ... Это так странно, но я работал на меня. – monokrome

Смежные вопросы