gpt4 book ai didi

c - 多线程的段错误 (ncurses)

转载 作者:行者123 更新时间:2023-11-30 15:38:29 24 4
gpt4 key购买 nike

具有以下结构和全局变量:

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 错误 err (注意:至少总是打印一些东西)。如果我删除 mvprintw()来自while(true)段错误永远不会发生。可能是什么问题?

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;
}

段故障时的输出屏幕:

                                                              a a             Segmentation fault (core dumped)

无段故障时的输出屏幕:

         a                            a  a              a             a     aa
a a a

最佳答案

感觉

屏幕 = malloc(col * sizeof(Column *));

成为

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

因为sizeof(Column *)只会返回指针的大小

关于c - 多线程的段错误 (ncurses),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com