Segfault lors de la modification de char*
Fermé
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
-
14 avril 2013 à 05:14
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 - 14 avril 2013 à 23:19
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 - 14 avril 2013 à 23:19
A voir également:
- Segfault lors de la modification de char*
- Suivi de modification word - Guide
- Logiciel modification pdf - Guide
- Modificateur de voix en direct - Guide
- Modification liste déroulante excel - Guide
- Votre administrateur n'autorise pas cette modification ✓ - Forum Motorola
2 réponses
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
14 avril 2013 à 10:44
14 avril 2013 à 10:44
Bonjour, str1 et str2 sont "vide" ces pointeurs en l'état ne peuvent pas être utilisés comme des tableaux de char.
dest[x] = src[x]; //segfault ici
dest ne pointant pas sur une adresse valide créé le segfault en voulant écrire des données " n'importe où ".
donnez une adresse valide à str1 et 2, pouvez utiliser malloc :
str1 = malloc(sizeof(char)*100);
dest[x] = src[x]; //segfault ici
dest ne pointant pas sur une adresse valide créé le segfault en voulant écrire des données " n'importe où ".
donnez une adresse valide à str1 et 2, pouvez utiliser malloc :
str1 = malloc(sizeof(char)*100);
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 101
14 avril 2013 à 15:26
14 avril 2013 à 15:26
Merci =)
En effet, avec du malloc, ça marche tout de suite mieux :)
Sait tu pourquoi ma fonction str_copy fonctionnait au premier appel quel que soit l'ordre de mes variables ?
En effet, avec du malloc, ça marche tout de suite mieux :)
Sait tu pourquoi ma fonction str_copy fonctionnait au premier appel quel que soit l'ordre de mes variables ?
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 14/04/2013 à 20:02
Modifié par Hxyp le 14/04/2013 à 20:02
Je ne sais pas normalement ça ne doit pas fonctionner du moins jusqu'à dest[x] = src[x]; arrivé là ça 'devrait' planter du premier coup.
char *str;
char *chaine = "une chaine";
maintenant si on fait :
str[4] = chaine[4];
ok pour chaine car initialisé avec une chaine de plus de 5 char, contient alors l'adresse du début de la chaine, chaine[4] retourne la valeur à l'adresse chaine+4 qu'on pourrait écrire *(chaine+4)
mais pas ok pour str qui est un pointeur non initialisé et faire str[4] c'est faire *(str+4) on va essayer de lire (enfin ici on va essayer d'ecrire) à l'adresse str+4 hors str ne contient pas une adresse valide, il peut contenir NULL ou n'importe quel valeur tant qu'il n'est pas initialisé du coup faire str[4] c'est essayez de lire quelque part où il ne faut pas et c'est pourquoi ça doit planter.
char *str;
char *chaine = "une chaine";
maintenant si on fait :
str[4] = chaine[4];
ok pour chaine car initialisé avec une chaine de plus de 5 char, contient alors l'adresse du début de la chaine, chaine[4] retourne la valeur à l'adresse chaine+4 qu'on pourrait écrire *(chaine+4)
mais pas ok pour str qui est un pointeur non initialisé et faire str[4] c'est faire *(str+4) on va essayer de lire (enfin ici on va essayer d'ecrire) à l'adresse str+4 hors str ne contient pas une adresse valide, il peut contenir NULL ou n'importe quel valeur tant qu'il n'est pas initialisé du coup faire str[4] c'est essayez de lire quelque part où il ne faut pas et c'est pourquoi ça doit planter.
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 101
14 avril 2013 à 23:19
14 avril 2013 à 23:19
mouais, c'est louche tout ça :/
Finalement je vais recoder ma fonction depuis le début en appliquant ce que tu me dit, ça devrait mieux marcher que de bricoller en mettant des mallocs à l'arrache ^^
merci, je te tiens au courant ;)
Finalement je vais recoder ma fonction depuis le début en appliquant ce que tu me dit, ça devrait mieux marcher que de bricoller en mettant des mallocs à l'arrache ^^
merci, je te tiens au courant ;)