C: Correctement la libération de la mémoire d'un tableau multidimensionnel

Dire, vous avez le C ANSI code qui initialise un tableau multidimensionnel :

int main()
{
      int i, m = 5, n = 20;
      int **a = malloc(m * sizeof(int *));

      //Initialize the arrays
      for (i = 0; i < m; i++) { 
          a[i]=malloc(n * sizeof(int));
      }

      //...do something with arrays

      //How do I free the **a ?

      return 0;
}

Après l'utilisation de la **a, comment puis-je libérer correctement à partir de la mémoire ?


[Mise À Jour] (Solution)

Grâce à Tim (et les autres) réponse, je peux maintenant faire une telle fonction pour libérer de la mémoire de mon tableau multidimensionnel :

void freeArray(int **a, int m) {
    int i;
    for (i = 0; i < m; ++i) {
        free(a[i]);
    }
    free(a);
}
  • La terminologie chipoter: ce n'est pas ce que C appelle généralement un "tableau multidimensionnel". C'est juste le seul moyen d'utiliser la syntaxe a[i][j], tout en permettant à la fois des dimensions inconnues au moment de la compilation. L'autre type de tableau multidimensionnel à un tableau de tableaux, à la place de ce tableau de pointeurs (les premiers éléments de l') des tableaux.