我正在尝试创建一个函数,该函数将数组作为参数,向其添加值(必要时增加其大小)并返回项目数。到目前为止,我有:
int main(int argc, char** argv) {
int mSize = 10;
ent a[mSize];
int n;
n = addValues(a,mSize);
for(i=0;i<n;i++) {
//Print values from a
}
}
int addValues(ent *a, int mSize) {
int size = mSize;
i = 0;
while(....) { //Loop to add items to array
if(i>=size-1) {
size = size*2;
a = realloc(a, (size)*sizeof(ent));
}
//Add to array
i++;
}
return i;
}
如果 mSize 足够大以容纳数组的所有潜在元素,则此方法有效,但如果需要调整大小,则会出现分段错误。
我也试过:
int main(int argc, char** argv) {
...
ent *a;
...
}
int addValues(ent *a, int mSize) {
...
a = calloc(1, sizeof(ent);
//usual loop
...
}
无济于事。
我认为这是因为当我调用 realloc 时,'a' 的副本指向其他地方 - 如何修改它以使 'a' 始终指向相同的位置?
我这样做对吗?有没有更好的方法来处理 C 中的动态结构?我应该实施一个链接列表来处理这些吗?