我将尝试创建一个函数,它接受一个数组作为参数,向其添加值(如果需要增加其大小),并返回项目的数量。
到目前为止,我的代码如下:
如果mSize足够大以容纳数组的所有潜在元素,那么这将起作用,但如果需要调整大小,则会出现“分段错误”。 我也尝试过:
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中处理动态结构的更好方法有哪些?我应该实现一个链表来处理这些问题吗?