结构内部的Realloc动态数组

时间:2017-01-24 03:24:25

标签: c struct realloc flexible-array-member

我有一个结构:

  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我需要重新分配指针数组。我怎样才能重新分配内存?

1 个答案:

答案 0 :(得分:3)

我知道这看起来像是realloc的问题,但是您的问题是在struct的中间使用大小为零的数组。有关gcc中零长度数组的解释,请参阅here,在C99中也称为灵活数组成员,具体为:

  

灵活数组成员可能只显示为非空的结构的最后一个成员。