【问题标题】:C - Dynamic array of struct errorC - 结构错误的动态数组
【发布时间】:2015-06-09 05:46:17
【问题描述】:

我正在尝试实现一个多线程 C 程序,但我被卡住了。 我有一个结构,它包含一个 char 数组和一个指向另一个结构的指针(我正在尝试将该指针用作 buffer_items 的数组:

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” 持有人 -> 缓冲区[l] = new_item;

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

【问题讨论】:

  • holder-&gt;buffersbuffer_item 结构的数组,您可以将其视为buffer_item 结构的指针 数组。
  • 我明白了,如何相应地更改代码?
  • 哦,你实际上并没有为 holder-&gt;buffers 分配内存,所以它是未初始化的,指针值将是 indeterminate (并且看似随机)所以当你这样做时@ 987654328@你取消引用这个未初始化的指针,你得到undefined behavior

标签: c struct dynamic-arrays


【解决方案1】:

holder-&gt;buffers 是一个指向struct buffer_item 的指针,但在赋值holder-&gt;buffers[l] = new_item 中,您将它视为一个指针数组。

要修复它,只需将 holder-&gt;buffers[l] = new_item; 更改为 holder-&gt;buffers = new_item;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2017-03-13
    • 2016-04-02
    • 2012-10-11
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多