Libération Tableau 2D [Résolu]

Signaler
Messages postés
27
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
3 décembre 2019
-
[Dal]
Messages postés
5310
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2019
-
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

12 réponses

Messages postés
9118
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 décembre 2019
468
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.
Adiren
Messages postés
27
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
3 décembre 2019
1
Il est alloué en N+1 malloc
Adiren
Messages postés
27
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
3 décembre 2019
1
initMatrix(N, M);

libere(tableau,N);
yg_be
Messages postés
9118
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 décembre 2019
468 > Adiren
Messages postés
27
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
3 décembre 2019

la variable tableau n'est ni déclarée, ni initialisée avant l'appel à libere()?
Adiren
Messages postés
27
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
3 décembre 2019
1
C'est initMatrix
[Dal]
Messages postés
5310
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2019
833
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
1947
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
27 novembre 2019
273
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.
Adiren
Messages postés
27
Date d'inscription
samedi 3 septembre 2016
Statut
Membre
Dernière intervention
3 décembre 2019
1
Dans les fonctions pour libérer un tableau 2D, on passe l'adresse du tableau 2D si bien compris
Tomsuper
Messages postés
1947
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
27 novembre 2019
273
Je vois pas l'intérêt mais ok