2015-04-04 117 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;