Erreur pointeur de pointeur de char en C

Résolu/Fermé
perato - Modifié le 25 févr. 2022 à 06:43
 perato - 25 févr. 2022 à 15:37
Bonjour,
j'ai fait le code suivant et pour une raison inconnue que test[0] n'affiche plus "ok" alors que je n'y touche pas.

int main()
{
 char **test = malloc(1);
 test[0] = malloc(3);
 test[0][0] = 'o';
 test[0][1] = 'k';
 test[0][2] = '\0';
 
 printf("%p\n", test[0]);
 puts(test[0]); // affiche ok
 
 test = realloc(test, 2);
 test[1] = malloc(3); // a partir de cette instruction puts(test[0]) affiche une chaîne bizzare
 test[1][0] = 'o';
 test[1][1] = 'k';
 test[1][2] = '\0';
 
 printf("%p\n", test[0]); // le pointeur n'a pas changé de valeur
 puts(test[0]); // affiche une chaîne bizzare
}


Pourtant j'ai remarque avec printf que la valeur du pointeur test[0] ne change pas.
En plus j'ai aussi remarque que test[0] affichait bien "ok" jusqu'au moment où test[1] est alloué.
A voir également:

1 réponse

yg_be Messages postés 22691 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 avril 2024 1 471
25 févr. 2022 à 08:52
bonjour,
peux-tu partager ce qui est affiché? peux-tu aussi afficher le second pointeur?

Peux-tu supprimer les lignes 14 à 16?
1
yg_be Messages postés 22691 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 avril 2024 1 471
25 févr. 2022 à 09:04
En ligne 3, au lieu de
malloc(1)
, il est préférable de faire
malloc(sizeof(char*))
.
Et d'adapter également la ligne 12.
2
perato > yg_be Messages postés 22691 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 avril 2024
25 févr. 2022 à 15:37
merci yg_be tout le problème venait du fait que que j'ai mit 1 au lieu de sizeof(char *) j'ai confondu le type char de taille 1 et le pointeur char * qui a une plus grande taille
0
yg_be Messages postés 22691 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 avril 2024 1 471
25 févr. 2022 à 09:13
peux-tu aussi afficher les valeurs de test?
1