我有一个结构:
struct Node{
struct Node* pointer[0];
int num;
} *current=NULL;
然后在函数中我尝试创建子节点
void AddChild(struct Node *node) {
uint8_t n=2; // number of add children
for(uint8_t i=n; i-->0;){
struct Node* leaf=(struct Node*)malloc(sizeof(struct Node)); //allocate memory to child
struct Node* tmp=(struct Node*)realloc(node->pointer,(++node->num)*sizeof(struct Node*)); //reallocate memory for dynamic array mistake
if (!tmp)
printf("Error in memory alocation\n");
node->pointer[node->num]=leaf;
}
}
问题是realloc给我错误。
realloc():指针无效:
因此,如果它是c ++我可以创建一个向量并且只是推回元素,但是使用c我需要重新分配指针数组。我怎样才能重新分配内存?
答案 0 :(得分:3)
我知道这看起来像是realloc
的问题,但是您的问题是在struct
的中间使用大小为零的数组。有关gcc
中零长度数组的解释,请参阅here,在C99中也称为灵活数组成员,具体为:
灵活数组成员可能只显示为非空的结构的最后一个成员。