【发布时间】:2015-06-09 05:46:17
【问题描述】:
我正在尝试实现一个多线程 C 程序,但我被卡住了。 我有一个结构,它包含一个 char 数组和一个指向另一个结构的指针(我正在尝试将该指针用作 buffer_items 的数组:
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” 持有人 -> 缓冲区[l] = new_item;
我一直在尝试解决它,但找不到任何东西。 任何帮助将不胜感激。谢谢你们。
【问题讨论】:
-
holder->buffers是buffer_item结构的数组,您可以将其视为buffer_item结构的指针 数组。 -
我明白了,如何相应地更改代码?
-
哦,你实际上并没有为
holder->buffers分配内存,所以它是未初始化的,指针值将是 indeterminate (并且看似随机)所以当你这样做时@ 987654328@你取消引用这个未初始化的指针,你得到undefined behavior。
标签: c struct dynamic-arrays