typedef struct DArray{
void **array;
int capacity;
int size;
void (*display)(FILE *, void *); //function pointer to a non-generic display function
} DArray;
しかし、現在の動作で、配列のサイズを変更していないように、そしてゼロでないインデックスにアクセスしようとすると、いつでもセグメンテーションがスローされます。コンストラクタと挿入関数は次のようになります。
DArray *newDArray(void (*d)(FILE *,void *)){
DArray *myDarray = malloc(sizeof(DArray));
myDarray->array = malloc(sizeof(void *)); //size = 1 for now, otherwise multiply by array length
myDarray->capacity = 1;
myDarray->size = 0;
myDarray->display = d;
return myDarray;
}
void insertDArray(DArray *a,void *v){
if (a->size < a->capacity)
a->array[a->size] = v;
else{
void **newArray = malloc(sizeof(void *) * a->capacity * 2); //double size
for (int i = 0; i <= a->size; i++)
newArray[i] = a->array[i]; //clone old array
a->capacity = a->capacity * 2;
free(a->array);
a->array = newArray;
}
a->size++;
}
ここで私の指摘を理解できません。私は何が起きているのかというと、a->配列へのポインタはまだ未定義の古い配列を指していますが、*a->array = newArray;
を実行するとどちらも機能しません。誰かがこれについていくつかの光を当てることができますか?
単一の開始のための任意の理由( '...の線に沿って、あなたのコードのロジックを変更ボイド* ')十分ではない? – StoryTeller
@StoryTellerジェネリック(void *)型を処理するには配列を実装する必要があります。私はポインタの配列を持っているべきだと信じています。 –
ポインタを配列に挿入すると、 'size'メンバは必要ありません。オブジェクトを挿入するとポインタの配列は必要ありません – StoryTeller