Libération Tableau 2D

Résolu
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

  1. Contributeur
    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.
    1. Le programme crash, ça devrait ressembler à cela

      int** initMatrix(int N, int M){
          
          int** tableau = (int**) malloc(sizeof(int*)*N);
          
          for(int i=0; i<N; i++){
              
              tableau[i]‌‌‍‍‍‌ = (int*) malloc(sizeof(int)*M);
              
              for(int j=0; j<M; j++){
                  tableau[i][j]=i+j;
              }
          }
          
         return tableau; 
      }
    2. Il est alloué en N+1 malloc
    3. Contributeur
      @Adirenil me semble utile de comprendre comment la fonction est appelée.
    4. initMatrix(N, M);

      libere(tableau,N);
    5. Contributeur
      @Adirenla variable tableau n'est ni déclarée, ni initialisée avant l'appel à libere()?
  2. 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.
    1. Dans les fonctions pour libérer un tableau 2D, on passe l'adresse du tableau 2D si bien compris
    2. Je vois pas l'intérêt mais ok