2012-02-28 2 views
0

XLib의 XCreateColormap에 대한 내 전화로 인해 세그먼트 오류가 발생합니다. 재미있는 점은 내가 사용한 코드의 대부분이 XLib 및 GLX를 사용하여 창과 OpenGL 컨텍스트를 만드는 방법을 보여주는 그물에서 본 코드와 거의 동일하다는 것입니다.XCreateColormap을 호출하여 세그먼트 화 오류가 발생합니다.

자세한 내용은 OVI_UnixDisplayData이라는 구조체가 있습니다.이 구조체는 기본적으로 창을 만들고 컨텍스트를 지정하는 데 사용되는 모든 관련 X Window/GLX 데이터의 컨테이너 역할을합니다. 나는 처음에는 문맥을 만들고 그 데이터 구조체에 대한 포인터를 반환하도록 설계된 함수를 가지고있다. 해당 구조체는 단지 dat (데이터 용)이라고합니다. 그게 문제가되지 않을 수

Occurance는 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); 

의 나는, 1.4로 반환되는 있습니다 GLX 내 자신의 버전을 확인했습니다. 그것의 Ontop 내 디버거에서 나는 dat->visualinfo->visual->ext_data 0x0의 값을 보유하고, 그래서 그걸로 뭔가 관련이있다 놀라지 않을 것이라고 알고 있습니다. 문제는 내가 어떻게 (모든 경우) 모르겠다. 어떤 함수를 호출해야하는지 모르겠다. 이 초기화되었는데, 그 동작이 C와 유사한 구현물 인 것으로 보인다. 연결된 목록.

누군가가이 문제에 대해 밝힐 수 있습니까? 정보가 필요합니다. Google 검색에서이 함수 호출로 인해 seg-faults를 경험 한 다른 사람들에 대한 결과를 얻었지만 그 중 아무도 이런 일이 일어난 이유와 비슷한 이유가 없었습니다. 그것이 무엇을 의미하는 경우

, 내가 GLX 1.4 및 OpenGL 4.2

+1

디버거에서 실행 해 보셨습니까? 그러면 충돌이 발생한 곳을 정확하게 볼 수 있고 변수를 검사 할 수 있습니다. 유닉스/리눅스 시스템에서 가장 일반적인 디버거를 사용하는 법을 배우기 위해'gdb tutorials '에 대한 Google 검색을 수행하십시오. –

+1

[SSCCE] (http://sscce.org/)를 제공하십시오. –

+0

@JoachimPileborg 예, 전체 내용을 읽으면 이미 내 디버거가 실행되었음을 알 수 있습니다. – zeboidlund

답변

1

분할 고장이 나는 XSetWindowAttributes가 주소에 대한 포인터로 할당했다는 사실에 발생했습니다를 실행하고 있습니다. 대신 스택에 할당 할 때 문제가 해결되었습니다.

이 문제가 해결 된 것으로 간주합니다.

+0

아아아! 솔루션을 게시 해 주셔서 감사합니다 ... 이것은 매우 이상하지만 나를 위해 일했습니다. – monokrome