Je suis en train de mettre en œuvre un tableau dynamique qui doit avoir la structure suivante:allocation de mémoire Array dynamique avec vide **
typedef struct DArray{
void **array;
int capacity;
int size;
void (*display)(FILE *, void *); //function pointer to a non-generic display function
} DArray;
Cependant, avec le comportement actuel, le tableau ne semble pas redimensionner et jette un segfault chaque fois que j'essaie d'accéder à un index qui n'est pas nul. Le constructeur et la fonction d'insertion sont les suivants:
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++;
}
J'ai du mal à comprendre mes pointeurs ici. Je pense que ce qui se passe est que le pointeur vers un-> tableau pointe toujours vers l'ancien tableau non-résolu, mais faire *a->array = newArray;
ne fonctionne pas non plus. Quelqu'un peut-il nous éclairer là-dessus?
Quel est le motif pour un démarrage simple (' void * ') ne pas suffire? – StoryTeller
@StoryTeller le tableau doit être implémenté pour gérer les types génériques (void *). Je crois que je devrais avoir un tableau de pointeurs, d'où l'étoile double. –
Si vous insérez des pointeurs dans le tableau, vous n'avez pas besoin d'un membre 'size'. Si vous insérez des objets, vous n'avez pas besoin d'un tableau de pointeurs – StoryTeller