C - struct error的动态数组

时间:2015-04-04 07:46:03

标签: c struct dynamic-arrays

我试图实施一个多线程的C程序而且我被卡住了。 我有一个结构,它包含一个char数组和一个指向另一个结构的指针(我试图将该指针用作 buffer_item 的数组:

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'          持有人 - &gt; buffers [l] = new_item;

我一直试图解决它,却找不到任何东西。 任何帮助将不胜感激。谢谢你们。

1 个答案:

答案 0 :(得分:0)

holder->buffers是指向struct buffer_item的指针,但在作业holder->buffers[l] = new_item中,您将其视为指针数组。

要解决此问题,只需将holder->buffers[l] = new_item;更改为holder->buffers = new_item;

即可