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