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