Donc, j'ai des difficultés à allouer de la mémoire pour une char ***
variable de type. Mon objectif est de créer une matrice de chaînes de caractères et le code dont je dispose actuellement pour l'allocation de mémoire est le suivant :
char ***matrix;
matrix = calloc(n*MAX_STR, sizeof(char**));
for(z = 0; z < n; z++) {
matrix[z] = calloc(n, sizeof(char*));
for(i = 0; i < MAX_STR; i++) {
matrix[z][i] = calloc(MAX_STR, sizeof(char));
}
}
J'ai réussi à allouer de la mémoire pour un tableau de chaînes de caractères, en utilisant ceci :
char **list;
list = calloc(n, sizeof(char *));
for (j = 0; j < n; j++){
list[j] = calloc(MAX_STR, sizeof(char));
}
mais j'ai maintenant des problèmes avec la matrice.
L'exécution du programme avec --leak-check=full sur Valgrind me donne le message suivant :
==5126== Invalid write of size 8
==5126== at 0x400B9F: createmat (proj.c:100)
==5126== by 0x401598: main (proj.c:237)
==5126== Address 0x5210878 is 0 bytes after a block of size 72 alloc'd
==5126== at 0x4C2ABB4: calloc (vg_replace_malloc.c:593)
==5126== by 0x400B52: createmat (proj.c:98)
==5126== by 0x401598: main (proj.c:237)
J'aimerais trouver comment allouer de la mémoire pour cela, car je suis encore un débutant en matière de gestion de la mémoire en C. Toute aide serait appréciée, merci.
EDIT : La matrice est censée stocker n tableaux de chaînes de caractères, qui correspondent aux lignes de l'entrée (elle est lue avec fgets
plus tard), et chaque tableau alloue le nombre de mots de la ligne, chaque mot (lire, chaque chaîne) ayant au maximum une valeur de MAX_STR
nombre de caractères. n
est une variable lue à partir de l'entrée, tandis que MAX_STR
est une constante définie dans le programme.