0
votes

Ré-ajoutez un élément à une liste de matrices dynamiques (après la suppression de la mémoire)

Je travaille sur les listes de matrices dynamiques en c. J'ai des problèmes lorsque j'essaie de ré-ajouter un élément à une arracheliste après la réplocalisation de la distribution.

STRIT: P>

    array_list_insert(array,8);
    array_list_free(array);
    array_list_insert(array,8); // <--- Segmentation Fault


5 commentaires

Pouvez-vous s'il vous plaît Modifier Votre question et transformer vos morceaux de code en un Exemple de reproductible minimal ?


Vous gratuit un pointeur puis directement après l'utilisation?


Dans array_list_free , vous libres tableau , mais définissez des valeurs dans cette structure.


array_list_insert (tableau, 8); ne doit pas compiler, le deuxième paramètre de array_list_insert attend un vide * mais vous fournissez un int < / code>. Veuillez poster du code réel et non quelques morceaux de code patché ensemble.


Oui et non, @jabberwocky. La langue exige une conversion explicite là-bas, mais c'est une extension relativement courante pour effectuer la conversion implicitement.


3 Réponses :


1
votes

Le problème (au moins a em> problème) est ce array_list_free Free le Array_List_T CODE> objet lui-même, pas seulement le tableau dynamique interne:

    free(array);


1 commentaires

Merci beaucoup! J'ai réparé le problème (et je suis tellement honte à ce sujet ^^ '') merci encore :)



1
votes

gros problème ici: xxx

retirez les trois lignes commençant par tableau -> de la fonction.


0 commentaires

1
votes

sans Exemple vérifiable compilable minimal em> inclus dans votre message sera limité aux suggestions générales:

Un problème potentiel est que le prototype: p> xxx pré>

doit être modifié pour accueillir un pointeur sur l'objet qui doit être donné mémoire: P>

typedef struct array_list{
    size_t size;
    size_t capacity;
    struct array_list *array //this becomes new nodes of your list. 
}ListNode;


0 commentaires