我试图创建一个函数,它将一个数组作为参数,向它添加值(如果需要,增加它的大小)并返回项的数量。 到目前为止,我有:将动态数组传递给函数C
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中的动态结构吗?我应该实施一个链表来处理这些吗?
感谢您的支持!非常有用的信息 - 我将会看你是否可以按照Javier的建议重做我的代码。 如果我有多个不同类型的动态数组(如'ents'数组,'foos'数组等),是否可以创建一组方法来处理它们? – Tom 2008-12-04 17:11:41
你可以用C++中的模板做到这一点,但是在C中没有很好的方式来处理它。你可以通过一组精心设计的宏来实现,但是这并不适用于最漂亮或最易维护的代码。 – tgamblin 2008-12-04 17:15:22