配列を引数として取り、それに値を追加し(必要に応じてサイズを増やします)、アイテムの数を返す関数を作成しようとしています。これまでのところ、私は持っています:
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 で動的構造を処理するより良い方法はありますか? これらに対処するためにリンクされたリストを実装する必要がありますか?