0
我想实现一个多线程的C程序,我卡住了。 我有持有字符数组和指针到另一个结构的结构体(我尝试使用指针的buffer_item秒的数组:C - 结构错误的动态数组
typedef struct{
char** buffer;
} buffer_item;
typedef struct{
buffer_item* buffers;
char file_name[255];
}buffer_holder;
当我尝试创建buffer_item小号并把它们放到buffer_holder的缓冲器阵列,海湾合作委员会给了我以下错误:
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: error: incompatible types when assigning to type ‘buffer_item’ from type ‘struct buffer_item *’ holder -> buffers[l] = new_item;
我一直在TR要解决它,但找不到任何东西。 任何帮助将不胜感激。谢谢你们。
户主'> buffers'是'buffer_item'结构数组,你把它像*指针*到'buffer_item'结构的数组。 – 2015-04-04 07:51:25
我明白了,我该如何更改相应的代码? – user2604150 2015-04-04 07:52:35
呵呵,你实际上并没有为'holder-> buffers'分配内存,所以它没有被初始化,指针的值将是* indeterminate *(并且看起来是随机的),所以当你执行'holder'> buffers [l]'you解除引用这个未初始化的指针,你会得到[* undefined behavior *](http://en.wikipedia.org/wiki/Undefined_behavior)。 – 2015-04-04 07:52:46