Core dumped en C

Core dumped en C - C - Programmation

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 !!!!

Reply

Marsh Posté le 22-09-2011 à 17:38:23   

Reply

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.

Reply

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é.
 
En lecture , NULL ne pose pas de problème ( hormis une valeur invalide ), mais en écriture, cela génère une erreur de segmentation.


 
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.

Reply

Marsh Posté le 22-09-2011 à 18:02:50    

sal1 a écrit :


 
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
 
 


 

sal1 a écrit :


 
Tout à fait d'accord avec toi, je disais juste ça pour information rien de plus.


 
Tu passes une chaine de caractère "E" en lecture seule ( dans la zone des données statiques ) , normal que ça plante.

Reply

Marsh Posté le 22-09-2011 à 18:13:15    

xilebo a écrit :


 
Tu passes une chaine de caractère "E" en lecture seule ( dans la zone des données statiques ) , normal que ça plante.


 
Ok j'ai pigé, vraiment une erreur de débutant, j'avais pas fait attention à ça.
 
Encore merci xilebo pour ton aide précieuse !!!!!

Reply

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 ?

Reply

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  :pt1cable:  
 
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à
 

Reply

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed