1

我有一个结构:

  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 我需要重新分配指针数组。如何重新分配内存?

4

1 回答 1

3

我知道这看起来像一个问题,realloc但您的问题是在 a 中间使用大小为零的数组struct。请参阅此处了解 中的零长度数组,在 C99中gcc也称为灵活数组成员,具体而言:

灵活数组成员只能作为非空结构的最后一个成员出现。

于 2017-01-24T03:35:57.163 回答