我试图实施一个多线程的C程序而且我被卡住了。 我有一个结构,它包含一个char数组和一个指向另一个结构的指针(我试图将该指针用作 buffer_item 的数组:
typedef struct{
char** buffer;
} buffer_item;
typedef struct{
buffer_item* buffers;
char file_name[255];
}buffer_holder;
当我尝试创建 buffer_item 并将它们放入 buffer_holder 的缓冲区数组时,gcc会给我以下错误:
for(i = 0; i < n_value; i++){
buffer_holder *holder = (buffer_holder*) malloc(sizeof(buffer_holder));
int l;
for(l = 0; l < r_value; l++){
buffer_item *new_item = (buffer_item *)malloc(sizeof(buffer_item));
new_item->buffer = malloc(buffer_size * sizeof(char*));
int j;
for (j = 0; j < buffer_size; j++)
new_item->buffer[j] = malloc((MAX_WORD+1) * sizeof(char));
holder -> buffers[l] = new_item;
}
strcpy(holder -> file_name, argv[i+3]);
if(pthread_create(&mapper_threads[i], NULL, mapper, (void*) holder)) {
fprintf(stderr, "Error creating thread\n");
return 1;
}
}
wcountb2.c:187:28:错误:分配给类型时不兼容的类型 来自'struct buffer_item *'类型的'buffer_item' 持有人 - &gt; buffers [l] = new_item;
我一直试图解决它,却找不到任何东西。 任何帮助将不胜感激。谢谢你们。
答案 0 :(得分:0)
holder->buffers
是指向struct buffer_item
的指针,但在作业holder->buffers[l] = new_item
中,您将其视为指针数组。
要解决此问题,只需将holder->buffers[l] = new_item;
更改为holder->buffers = new_item;