Citation:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 char ***tab_retour; tab_retour = malloc(nb_ligne*sizeof(*tab_retour)); if (tab_retour == NULL){ exit(1); } for (i=0; i<nb_ligne; i++){ *(tab_retour+i) = malloc(nb_champs*sizeof(**tab_retour)); if(*(tab_retour+i) == NULL){ exit(1); } } /*...*/ return tab_retour;
Et pourtant non, elle n'est pas correcte.Citation:
La solution avec char ***tab_retour fonctionne... c'est qu'elle doit être correct.
Bien sur dans la fonction, on ne s'en aperçoit pas, si on ignore l'objectif recherché, parce que le malloc n'a que faire du type du pointeur destination. Par contre, au moment de l'utisation dans le programme appelant la fonction, le compilateur va couiner puisque les éléments de ce tableau sont des char ** et que tu vas les manipuler comme des char*. A l'exécution, si tu passes outre les avertissements du compilateur, les choses peuvent apparemment bien se passer si sizeof(char**) est égal à sizeof(char*), mais le programme est faux.
Le programme ci-dessus est basé sur le même principe que la solution d'Emmanuel (mais est erronné à cause de char ***) . Le même principe appliqué cette fois à un tableau à trois dimensions ferait apparaitre ces fameux char***.