"Segmentation Fault" avec malloc entre 757 et 1973. - C - Programmation
Marsh Posté le 03-11-2005 à 21:18:30
Comportement aléatoire = tu as un problème de gestion de la mémoire dans ton programme. Qui dépasse le cadre de ton seul malloc().
Marsh Posté le 03-11-2005 à 21:41:37
Arg, juste ce que je redoutais ... Bon bah je vais tout revoir alors ...
Sinon tu peux me donner des examples de "problèmes habituels" de gestion de mémoire ?
Marsh Posté le 03-11-2005 à 21:49:03
thoduv a écrit : Sinon tu peux me donner des examples de "problèmes habituels" de gestion de mémoire ? |
T'as le très classique débordement de capacité :
Code :
|
Ca semble fonctionner, sauf qu'aléatoirement tu auras des surprises à l'affichage de "cible".
Et avec un programme plus étoffé avec ce genre d'erreur, tu te retrouves avec des comportements étranges et aléatoires.
Mais des exemples de problèmes mémoires, il y en a des tas d'autres.
Marsh Posté le 04-11-2005 à 20:36:28
Apparement mon problème vient de cette fontion, qui splitte une chaine :
Code :
|
Je vois pas ce qui colle pas ...
Marsh Posté le 04-11-2005 à 20:46:40
Hmm. Tu retournes un char**, mais comment une fonction qui le lira saura où s'arrêter dans son parcours ?
Tu ne retournes pas la taille de ton char**, et tu ne le termines pas par NULL non plus.
Marsh Posté le 05-11-2005 à 12:17:43
thoduv a écrit : Apparement mon problème vient de cette fontion, qui splitte une chaine : |
Je ne sais pas trop ce que fait
explodedArray[++i] = pos; |
mais si tu veux
i++; |
ecrit le comme ça, c'est plus clair pour tout le monde.
malloc() ne fait pas d'initialisation. Il manque un
i++; |
après la dernière boucle.
En fait, je l'aurais ecrite comme ça :
{ |
Marsh Posté le 05-11-2005 à 13:43:05
Voilà la fonction corrigée, mais ce ne marche toujours pas, l'erreur est peut-être ailleurs. Mais est-ce qu'il y a encore des erreurs sur cette fonction :
Code :
|
Marsh Posté le 05-11-2005 à 13:58:36
Finalement c'est bon, j'avais oublié d'initialiser un pointeur que je pensais être défini par un fonction, mais laquelle fonction verifiait son contenu (qui était érronné par les malloc/free precedents). Merci quand même !
Marsh Posté le 05-11-2005 à 14:05:21
ReplyMarsh Posté le 05-11-2005 à 16:31:04
(sans oublier que la fonction standard strtok avec une boucle fait à peu près la même chose)
Marsh Posté le 06-11-2005 à 20:27:15
chrisbk a écrit : (j'aime pas le fait que ta fonction modifie son entrée ) |
Moi non plus mais j'ai pas trouvé mieux.
Marsh Posté le 06-11-2005 à 20:48:22
thoduv a écrit : Moi non plus mais j'ai pas trouvé mieux. |
Retourner un
|
Marsh Posté le 03-11-2005 à 21:11:49
Bonjour,
Je recontre en ce moment une erreur très étrange : tous les malloc() que je fais pour une taille comprise entre 757 et 1973 font planter mon programme en renvoyant une "Segmentation fault" ... Si j'essaie avec 1 ou 65536 ca marche, mais entre 757 et 1973, non. En plus ces nombres ne correspondent à rien que je connaisse ...
Merci d'avance !