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

  FORUM HardWare.fr
  Programmation
  C

  Aide au débugage - Comportement bizare d'une fonction...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide au débugage - Comportement bizare d'une fonction...

n°1068302
pinguin007
a npe error
Posté le 02-05-2005 à 02:52:08  profilanswer
 

Ponchour alors voila pour un 'projet' à faire pour la fac (hum bon je pense que c'est charte compliant parceque je ne demande pas qu'on me fasse le programme à ma place mais  sinon je deleterais)
 
le probléme viens d'une fonction qui remplis un peu la meme fonction que getopt()
 
parcour les arguments donnés au programme
engeristre la position des arguments ansi que le nombre de leur parametre dans un tableau
 
voici le code :
 

Code :
  1. typedef struct _info {
  2. int present ;
  3. int nbparam ;
  4. } InfoArg;
  5. void Record(InfoArg *argument, int position, int *last_arg_position, InfoArg *last_argument) {
  6.       if (argument->present !=0) { 
  7.            exit(1);
  8.       }
  9.       if (last_argument == NULL) {
  10.            argument->present = position ;
  11.            last_argument = argument ;
  12.       }
  13.       else {
  14.            argument->present = position ;
  15.            last_argument->nbparam = argument->present - last_argument->present ;
  16.            last_argument = argument ;
  17.       }
  18. }
  19. void PrepareArg(int nb_arg, char *liste_arg[], InfoArg *liste_param){
  20. /* nb_arg = argc, *liste_arg[] = argv, liste_param l'adresse d'un tableau de InfoArg*/
  21. printf("  inside the analyse\n" );
  22. InfoArg *last_arg=NULL ;
  23. int nb = nb_arg ,
  24.     last_pos=0 ;
  25. printf("  debut boucle for\n" );
  26. for (nb = 1 ; nb < nb_arg ; nb++){
  27.  if (*liste_arg[nb]=='-');
  28.    switch (*++liste_arg[nb]) {
  29.     case 'm' :
  30.      Record(&liste_param[0], nb, &last_pos, last_arg);
  31.      break;
  32.     case 'f' :
  33.      Record(&liste_param[1], nb, &last_pos, last_arg);
  34.      break;
  35.     default :
  36.      printf("    insde teh switch\n" );
  37.      break;
  38.    }
  39. }
  40. }


 
Alors le probléme viens du fait que la fonction record ne modifie que argument->present et lors du second passage ne modifie pas last_argument->nbparam (last_argument est censé contenir l'adresse dans le tableau liste_param de l'argument precédent)
Aprés l'utilisation de plein de printf je me suis rendu compte que a chaque appel de record last_argument == NULL bien qu'il y ait l'affectation :  last_argument = argument
 
Voila auriez vous explication :??:
 
:jap:
 


---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
mood
Publicité
Posté le 02-05-2005 à 02:52:08  profilanswer
 

n°1068312
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2005 à 07:13:42  profilanswer
 


Y'a pas mal d'erreurs à commencer par un ';' après un if dans PrepareArg(). Ensuite, je dirais que si tu veux qu'une fonction modifie une valeur , il faut passer l'adresse de la variable contenant cette valeur. Dans Record(), on a  

          last_argument = argument ;


qui ne fait que modifier localement la valeur d'un paramètre...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1068346
cesarr89
Posté le 02-05-2005 à 08:43:48  profilanswer
 

C'est clair, c'est quoi la ligne 30 ?

n°1068639
pinguin007
a npe error
Posté le 02-05-2005 à 13:04:28  profilanswer
 

Emmanuel Delahaye a écrit :

Y'a pas mal d'erreurs à commencer par un ';' après un if dans PrepareArg(). Ensuite, je dirais que si tu veux qu'une fonction modifie une valeur , il faut passer l'adresse de la variable contenant cette valeur. Dans Record(), on a  

          last_argument = argument ;


qui ne fait que modifier localement la valeur d'un paramètre...


 
en effet ca irait mieu si je passait par adresse ^^
 
 

cesarr89 a écrit :

C'est clair, c'est quoi la ligne 30 ?


 
 
pour le if, a chaque foi qu'on avance dans le tableau on regarde si le premier char est '-' si c'est le cas c'est que c'est un argument donc on rentre dans le switch sinon on ne fait rien.
 
Et pour le ; du if je ne sais pas trop ce qu'il fait là surement un bout de code pas complêtement effacé  [:brainwasher]


---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
n°1068648
cesarr89
Posté le 02-05-2005 à 13:17:53  profilanswer
 

ok


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

  Aide au débugage - Comportement bizare d'une fonction...

 

Sujets relatifs
(ruby) besoin d'aide urgentBesoin d'aide pour débug
besoin d'aide je suis novice en prog[AIDE] Editer un EXE
UPLOAD de fichier fonction ftpFonction call?
Aide sur un projet[Flash] problème avec la fonction hitTest (problème illustré)
fonction pour afficher tous les éléments d'une méthode POST.Comment zipper un fichier à partir de la fonction Shell
Plus de sujets relatifs à : Aide au débugage - Comportement bizare d'une fonction...


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