Lun*_*nyx 3 c arrays malloc struct realloc
我对c很新,所以如果我的步骤有误,请告诉我.假设我有以下内容:
struct graphNode{
int val;
graphNode* parent;
int succSize;
int succMaxSize;
graphNode* succ[1];
};
Run Code Online (Sandbox Code Playgroud)
我将创建一个新节点:
graphNode *n;
n = malloc(sizeof(struct graphNode));
assert(n);
n->val = 1;
n->parent = NULL;
n->succSize = 0;
n->succMaxSize = 1;
Run Code Online (Sandbox Code Playgroud)
然后,如果我想向节点添加后继者
if (n->succSize == n->succMaxSize){
n->succ = realloc(n->succ, sizeof(graphNode*) * n->succMaxSize * 2);
n->succMaxSize *= 2;
}
n->succ[succSize] = n2; //n2 is of type graphNode*
succSize++;
Run Code Online (Sandbox Code Playgroud)
它是否正确?我是否需要为结构重新分配或者是否足够重新分配数组?我需要malloc作为初始数组吗?初始数组大小是否应包含在我的malloc调用n中?
在C中定义"弹性"数组成员的常用方法是指定大小0或根本不指定大小,例如:
struct foo {
int stuff;
bar theBars[]; // or theBars[0]
};
Run Code Online (Sandbox Code Playgroud)
使用此定义,sizeof(struct foo)将包括末尾除阵列之外的所有元素,并且您可以通过说明来分配正确的大小malloc(sizeof(struct foo) + numberOfBars * sizeof(bar)).
如果您需要重新分配它以更改bar元素的数量,那么您将使用相同的公式(但使用新的numberOfBars).
要清楚,你不能只是realloc结构的一部分.你必须完成realloc整个事情.