具有以下结构和全局变量:
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++;
}
}
}
在我加入线程后的main函数中,我开始打印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错误(注意:至少某些内容始终打印)。如果我从mvprintw()
中移除while(true)
,则不会发生seg错误。可能是什么问题?
P.S。请不要发布与互斥锁相关的答案,因为这是一项任务,我宁愿纠正我的问题,而是重新实现这个想法,尤其是在没有互斥锁的情况下执行它。
编辑:
分配全局变量screen
(主要部分)
screen = malloc(col * sizeof(Column *));
i = 0;
for (; i<col; i++){
screen[i].text = malloc(MAX_ELEM * sizeof(char));
screen[i].size = 0;
}
seg fault的输出屏幕:
a a Segmentation fault (core dumped)
无段错误的输出屏幕:
a a a a a aa
a a a
答案 0 :(得分:1)
感觉
screen = malloc(col * sizeof(Column *));
是
screen = malloc(col * sizeof(Column));
因为sizeof(Column *)
只返回指针的大小