Core dumped en C - C - Programmation
Marsh Posté le 22-09-2011 à 17:44:54
type_fichier ne serait pas NULL par hasard ? aucun test n'est fait de ce coté.
En lecture , NULL ne pose pas de problème ( hormis une valeur invalide ), mais en écriture, cela génère une erreur de segmentation.
Sinon, pour ton avant-dernière phrase, ce n'est pas parce qu'un code marche sur une plateforme , qu'il marchera sur une autre, surtout s'il est mal écrit.
Marsh Posté le 22-09-2011 à 17:58:48
xilebo a écrit : type_fichier ne serait pas NULL par hasard ? aucun test n'est fait de ce coté. |
Voici le code de l'appel à la fonction :
TraitementAlarme("E", WAR_DOUBLON, lstrLigne, "" );
Donc type_fichier doit pointer vers "E" et n'est pas NULL
xilebo a écrit : Sinon, pour ton avant-dernière phrase, ce n'est pas parce qu'un code marche sur une plateforme , qu'il marchera sur une autre, surtout s'il est mal écrit. |
Tout à fait d'accord avec toi, je disais juste ça pour information rien de plus.
Marsh Posté le 22-09-2011 à 18:02:50
sal1 a écrit : |
sal1 a écrit : |
Tu passes une chaine de caractère "E" en lecture seule ( dans la zone des données statiques ) , normal que ça plante.
Marsh Posté le 22-09-2011 à 18:13:15
xilebo a écrit : |
Ok j'ai pigé, vraiment une erreur de débutant, j'avais pas fait attention à ça.
Encore merci xilebo pour ton aide précieuse !!!!!
Marsh Posté le 22-09-2011 à 19:07:56
L'erreur, ça peut arriver à tout le monde, mais ce qui est étonnant, c'est que tu aies besoin d'aide pour résoudre celle-ci. Un debugger t'aurait immédiatement renseigné sur le problème. En utilises-tu un ?
Marsh Posté le 23-09-2011 à 09:27:06
xilebo a écrit : L'erreur, ça peut arriver à tout le monde, mais ce qui est étonnant, c'est que tu aies besoin d'aide pour résoudre celle-ci. Un debugger t'aurait immédiatement renseigné sur le problème. En utilises-tu un ? |
Oui j'utilise gdb (depuis un bon moment déjà) pour débugger mais je n'avais pas le même comportement lorsque je lançais le programme avec ou sans gdb.
Je ne comprenais pas cette différence, c'était comme-ci mes variables d'environnement étaient différentes
Pour être plus explicite, au début de mon programme je vais récupérer des variables d'environnement, en fonction de leur valeur le programme s'arrête ou non.
Avec gdb je récupérai de mauvaises valeur du coup le programme s'arrêtait dès le début et ne continuait pas.
Alors que lorsque je lançais le programme seul il récupérait les bonnes variables mais plantait à cause du core dumped
voili voilà
Marsh Posté le 23-09-2011 à 10:49:33
Si tu as un core, tu lances gdb dessus, ça te donne l'état de la pile au moment du plantage, et c'est suffisant pour une grosse partie des plantages dus a de mauvaises initialisations de pointeurs.
A+,
Marsh Posté le 22-09-2011 à 17:38:23
Bonjour à tous,
J'ai un programme en C qui fait appel à une fonction dont le voici le code :
void TraitementAl (char *type_fichier, char *code_erreur, char *ligne,
char *texte)
{
char chaine[1000];
char cle[250];
switch (type_fichier[0])
{
case 'A' :
strncpy(cle, ligne, 8);
cle[8] = '\0';
break;
case 'B' :
strncpy(cle, ligne, 16);
cle[16] = '\0';
break;
case 'S' :
strncpy(cle, ligne, 44);
cle[44] = '\0';
break;
default :
type_fichier[0] = 'Z';
strcpy(cle, ligne);
break;
}
sprintf(chaine, "$%c:%6s:%04d%02d%05d:%s:%s",
type_fichier[0],
code_erreur,
cle_lot_glob.exercice_comptable,
cle_lot_glob.mois_comptable,
cle_lot_glob.code_uc_aff,
cle,
texte);
printf("%s\n", chaine);
}
Le problème est que j'ai un core dumped à l'exécution au niveau de la ligne : type_fichier[0] = 'Z';
En effet lorsque je supprime cette ligne tout se passe bien. Mais maintenant je ne comprends pas pourquoi j'ai cette erreur.
Avez-vous une idée sur ce problème ?
Je précise que ce programme avait été développé il y a plusieurs années sous Unix Tru64 et fonctionnait parfaitement. Par contre sous Linux Red Hat 5 la compilation se passe bien mais à l'exécution je tombe sur le core dumped.
Merci d'avance pour votre aide précieuse !!!!