我試圖創建一個函數,它將一個數組作爲參數,向它添加值(如果需要,增加它的大小)並返回項的數量。 到目前爲止,我有:將動態數組傳遞給函數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