2014-02-12 2 views
0

:분할 오류 다음과 같은 구조체 및 글로벌 VAR 갖는 (ncurses를)

typedef struct Column{ 
    char * text; 
    int size; 
} Column; 

Column * screen; 

그리고이 스레드 기능 :

void * thread_function(void * msg){ 
    Info *mesg = (Info *)msg; 
    int col = mesg->c; 

    int count = 0; 
    while (count < MAX_ELEM){ 
     if (rand() % 2){ 
      screen[col].text[count] = ' '; 
      screen[col].size++;  
      count++; 
     } 
     else{ 
      screen[col].text[count] = 'a'; 
      screen[col].size++;  
      count++; 
     } 
    } 
} 

주요 기능에를 내가 스레드에 가입 한 후 나는 인쇄 시작 screen

int row = 42; // num of rows on the screen 
while(true){ 
     int i; 
     for (i = 0; i<col; i++){ 
      int j = screen[i].size - 1; // print only up to already assign value 
      int k = 0; 
      while (j >= 0 && k < row){ 
       mvprintw(k,i,"%c",screen[i].text[j]); 
       refresh(); 
       j--; 
       k++; 
      } 
     } 
     refresh(); 
    } 

일부 실행은 정상적으로 실행됩니다. 다른 하나는 while(true)의 몇 번 반복 이후에 Seg 오류가 발생합니다 (참고 : 항상 최소한의 것이 인쇄됩니다). while(true)에서 mvprintw()을 제거하면 seg 오류가 발생하지 않습니다. 문제는 무엇이 될 수 있습니까?

p.s. 뮤텍스와 관련된 답변을 게시하지 마십시오. 이는 과제이며, 제가 가지고있는 문제를 수정하고, 뮤텍스없이 수행 할 수있을 때 특히 아이디어를 재 구현하는 것을 선호합니다.

편집 : 없음 독방 감금 오류에

               a a    Segmentation fault (core dumped) 

출력 화면 : 글로벌 VAR screen SEG 고장에서 (주요 부분)

screen = malloc(col * sizeof(Column *)); 
i = 0; 
    for (; i<col; i++){ 
     screen[i].text = malloc(MAX_ELEM * sizeof(char)); 
     screen[i].size = 0; 
    } 

출력 화면의

할당

  a       a a    a    a  aa 
         a a          a 
+0

이 Screen'와 '할당'에 관한 몇 가지 코드를 게시 sizeof(Column *) 포인터의 크기를 반환

screen = malloc(col * sizeof(Column)); 

때문에

screen = malloc(col * sizeof(Column *));

될 것을 바랍니다 Screen-> text' –

+0

디버거에서 코드를 실행 해 보셨습니까? 또한 자체 포함 된 예제가 도움이 될 것입니다. – Hasturkun

+0

@Hasturkun 질문에'mvprintw()'및'screen [i] .text [j]가 적혀있어서 수동으로 디버깅하는 코드 편집기를 사용하고 있습니다. 'screen [i]'가 존재하고'j'는 값이 실제로 다음 슬롯에 할당 된 후에 만 ​​main에서 증가하는 크기가 아니더라도 seg fault를 발생시킵니다. –

답변

1

유 plz 수 있습니다

+0

그래, 그게 문제 였어, 이건 너무 창피하다. –

관련 문제