c - 将结构数组分配给另一个结构成员时类型不完整

标签 c struct

我已经处理了一段时间,但似乎无法弄清楚发生了什么。我在头文件中为结构提供了空定义,因此它们是不透明的。

typedef struct block_store block_store_t;
typedef struct block block_t;

我实际上在另一个文件中定义了它们。

struct block_t{
    void* data;
};    

struct block_store_t{
     block_t* b;
 };

void create_struct(){
    block_store_t* bs = malloc(sizeof(block_store_t*));
    block_t* array = malloc(sizeof(block_t*) * 256);

    bs->b = array;  //error: dereferencing pointer to incomplete type
 }

最佳答案

typedef struct 在另一个结构中使用它之前

typedef struct block{
        void* data;
}block_t;    

typedef struct block_store{
     block_t* b; /* it works bcz you typedefed before only */
}block_store_t;

另外 sizeof(block_store_t*) 应该是 sizeof(block_store_t) 因为第一个只分配等于 struct pointer 大小但你可能想要分配等于整个结构大小。

block_store_t* bs = malloc(sizeof(block_store_t));/* allocate memory equal to sizeof structure, not just 4 bytes */
//block_t* array = malloc(sizeof(block_t) * 256);
block_t* array = malloc(sizeof(*array) * 256);/*preferable to use bcz it work for any data type */

关于c - 将结构数组分配给另一个结构成员时类型不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818899/

相关文章:

c - loadrunner 为每个 VUser 上传唯一的文件

c - AVR ATMega328P ADC channel 选择问题

自定义结构返回函数停留在输入上?

C 结构数组元素初始化转换

c - 结构体和符号数组

struct - 是否有用于构造包含对临时对象的引用的结构的单行语法?

C代码Makefile,如何包含路径?

c - C语言中头文件的作用是什么?

c - 附加到字符串的未打印字符

c - 为什么可以使用 typedef 的名称作为结构成员的名称?