Libération Tableau 2D [Résolu]

Signaler
Messages postés
37
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
4 septembre 2020
-
Messages postés
5411
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 septembre 2020
-
Bonjour, j'ai besoin de créer une fonction qui libère un tableau en 2D et le passer à null, pour l'instant j'ai fait ça et ça ne fonctionne pas

void libere(int*** tableau, int N){
    
    for (int i=0; i<N; i++){
   ‌‌‍‍‍‌     free(tableau[i]);
    }

    free(tableau);
    
    tableau = NULL;
    
}


Merci d'avance pour votre aide

2 réponses

Messages postés
12415
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2020
696
bonjour,
"ça ne fonctionne pas": as-tu un message d'erreur?
il me semble utile de comprendre comment le tableau a été alloué, et comment la fonction est appelée.
Messages postés
37
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
4 septembre 2020
2
Il est alloué en N+1 malloc
Messages postés
37
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
4 septembre 2020
2
initMatrix(N, M);

libere(tableau,N);
Messages postés
12415
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2020
696 >
Messages postés
37
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
4 septembre 2020

la variable tableau n'est ni déclarée, ni initialisée avant l'appel à libere()?
Messages postés
37
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
4 septembre 2020
2
C'est initMatrix
Messages postés
5411
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 septembre 2020
898
La variable pointeur tableau est locale à initMatrix() et dans ce que tu postes, on ne voit pas que tu affectes le résultat retourné par initMatrix() à une autre variable de même type
int**
existante dans le contexte de la fonction appelante et qui s'appellerait aussi "tableau".

Donc, tu n'as toujours pas répondu à la question de yg_be "la variable tableau n'est ni déclarée, ni initialisée avant l'appel à libere()?".

J'ajouterai qu'ensuite, tu dois passer à libere() un pointeur sur ce qui est retourné par initMatrix(). Ton appel à libere() devra tenir compte de cela.
Messages postés
1922
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
19 août 2020
354
Bonjour,

Un tableau en 2D avec un int *** ? j'ai peut être mal compté mais, je vois 3 étoiles, le principe que tu as fait dans ton for, et cependant très bien, faudrait allez plus loins.

Cordialement.
Messages postés
37
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
4 septembre 2020
2
Dans les fonctions pour libérer un tableau 2D, on passe l'adresse du tableau 2D si bien compris
Messages postés
1922
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
19 août 2020
354
Je vois pas l'intérêt mais ok