Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2468 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Core dumped en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Core dumped en C

n°2102893
sal1
Posté le 22-09-2011 à 17:38:23  profilanswer
 

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

mood
Publicité
Posté le 22-09-2011 à 17:38:23  profilanswer
 

n°2102896
xilebo
noone
Posté le 22-09-2011 à 17:44:54  profilanswer
 

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.

n°2102902
sal1
Posté le 22-09-2011 à 17:58:48  profilanswer
 

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.

n°2102903
xilebo
noone
Posté le 22-09-2011 à 18:02:50  profilanswer
 

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.

n°2102907
sal1
Posté le 22-09-2011 à 18:13:15  profilanswer
 

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

n°2102912
xilebo
noone
Posté le 22-09-2011 à 19:07:56  profilanswer
 

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 ?

n°2102979
sal1
Posté le 23-09-2011 à 09:27:06  profilanswer
 

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à
 

n°2103003
gilou
Modérateur
Modzilla
Posté le 23-09-2011 à 10:49:33  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Core dumped en C

 

Sujets relatifs
C/C# peu importe, Lister les cartes sonCompiler des sources C++ sur Windows
Problème connection base de données en C++Problème core dumped sur pointeur de char
Programme en C qui demande la saisie du JJ/MM/AAAA[resolut|C] Le jeu de la vie: cellules adjacentes
[C#/.NET]Exception 0x8007007E et import de dll[C] Problème fscanf avec string
[ C ] Erreur de segmentation (core dumped) 
Plus de sujets relatifs à : Core dumped en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR