2015-04-04 74 views
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要解決它,但找不到任何東西。 任何幫助將不勝感激。謝謝你們。

+0

戶主'> buffers'是'buffer_item'結構數組,你把它像*指針*到'buffer_item'結構的數組。 – 2015-04-04 07:51:25

+0

我明白了,我該如何更改相應的代碼? – user2604150 2015-04-04 07:52:35

+0

呵呵,你實際上並沒有爲'holder-> buffers'分配內存,所以它沒有被初始化,指針的值將是* indeterminate *(並且看起來是隨機的),所以當你執行'holder'> buffers [l]'you解除引用這個未初始化的指針,你會得到[* undefined behavior *](http://en.wikipedia.org/wiki/Undefined_behavior)。 – 2015-04-04 07:52:46

回答

0

holder->buffers是指向struct buffer_item的指針,但在作業holder->buffers[l] = new_item中,您將其視爲指針數組。

修復它只是改變holder->buffers[l] = new_item;holder->buffers = new_item;