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

  FORUM HardWare.fr
  Programmation
  C

  Mais où est passée ma variable? [Resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mais où est passée ma variable? [Resolu]

n°1726366
jijiz
Posté le 29-04-2008 à 16:32:21  profilanswer
 

Bonjour à tous et à toutes,
 
J'ai une structure contenant des informations :  

Code :
  1. typedef struct {
  2.    float t_pts_gauche[MAXPTS][2];
  3.    float t_pts_droite[MAXPTS][2];
  4.    int i_nb_pts_droite;
  5.    int i_nb_pts_gauche;
  6. }structure_s;


 
dans une fonction je parcours un fichier texte pour chopper une variable se trouvant 117 caractères plus loin que le début du fichier et je sauve la valeur dans la structure :
 

Code :
  1. // On se place sur la ligne contenant le nombre de points presents pour la camera gauche
  2. fseek(fic, 177, SEEK_SET);
  3. fscanf(fic,"         %i",&my_struct->i_nb_pts_gauche);


 
j'avance dans le fichier pour aller récuperer des tableaux de points :

Code :
  1. // On se place sur la premiere coordonnee de la grille gauche
  2. fseek(fic, 282, SEEK_SET);
  3. printf("Nbre pts : %d \n", my_struct->i_nb_pts_gauche);


 
et je parcours le fichier en sauvegardant les coordonnées des points :

Code :
  1. // Lecture et stockage des coordonnees de la grille gauche
  2. for(i = 0; i < my_struct->i_nb_pts_gauche; i++)
  3. {
  4.  printf("i : %d, nbpts : %d\n", i,my_struct->i_nb_pts_gauche );
  5.  fscanf(fic,"     %f     %f      %f      %f      %f",
  6.   &poubelle1,
  7.   &poubelle2,
  8.   &poubelle3,
  9.   &my_struct->t_pts_gauche[0],
  10.   &my_struct->t_pts_gauche[i][1]);
  11. }


 
 
Ce que je ne comprends pas est :
 
Si j'affiche ma variable avant la boucle :

Code :
  1. printf("Nbre pts : %d \n", my_struct->i_nb_pts_gauche);


elle contient la valeur 317 (normal)
Sauf que si j'utilise cette même variable pour servir de borne à la fonction for, je n'ai plus du tout 317 mais 1144542659. On dirait une adresse, ce qui est vraiment étrange est que je ne modifie pas la variable [i]my_struct->i_nb_pts_gauche pourtant elle se trouve modifée.
 
Merci beaucoup de votre lanterne.
 
Ju.

Code :
  1. Le code contigu :
  2. void get_points(char *fichier, structure_s *my_struct)
  3. {
  4.    int i;
  5.    int j;
  6.    int k;
  7.    int i_nb_pts_gauche;
  8.    int i_nb_pts_droite;
  9.    float poubelle1;
  10.    float poubelle2;
  11.    float poubelle3;
  12.    i_nb_pts_gauche = 0;
  13.    i_nb_pts_droite = 0;
  14.    i = 0;
  15.    FILE *fic = fopen(fichier, "rt" );
  16.    if (fic)
  17.    {
  18. // On se place sur la ligne contenant le nombre de points presents pour la camera gauche
  19. fseek(fic, 177, SEEK_SET);
  20. fscanf(fic,"         %i",&my_struct->i_nb_pts_gauche);
  21. //my_struct->i_nb_pts_gauche = i_nb_pts_gauche;
  22. // On se place sur la premiere coordonnee de la grille gauche
  23. fseek(fic, 282, SEEK_SET);
  24. printf("Nbre pts : %d \n", my_struct->i_nb_pts_gauche);
  25. // Lecture et stockage des coordonnees de la grille gauche
  26. for(i = 0; i < my_struct->i_nb_pts_gauche; i++)
  27. {
  28.  printf("i : %d, nbpts : %d\n", i,my_struct->i_nb_pts_gauche );
  29.  fscanf(fic,"     %f     %f      %f      %f      %f",
  30.   &poubelle1,
  31.   &poubelle2,
  32.   &poubelle3,
  33.   &my_struct->t_pts_gauche[i][0],
  34.   &my_struct->t_pts_gauche[i][1]);
  35. }


Message édité par jijiz le 30-04-2008 à 09:33:16
mood
Publicité
Posté le 29-04-2008 à 16:32:21  profilanswer
 

n°1726377
dap++
Script kiddie
Posté le 29-04-2008 à 16:42:50  profilanswer
 

Je n'ai pas vraiment de solution mais :

  • le mode "rt" n'est pas standard, utilise "r".
  • Tu ne peux utiliser fseek() comme ça en mode texte, a priori tu es obligé à parcourir le fichier jusqu'à ce que tu rencontres ta valeur (ou passer par le mode binaire).
  • Personnellement j'évite les *scanf() mais je suis peut-être parano.


---------------
dap.developpez.com
n°1726384
jijiz
Posté le 29-04-2008 à 16:44:58  profilanswer
 

dap++ a écrit :

Je n'ai pas vraiment de solution mais :

  • le mode "rt" n'est pas standard, utilise "r".
  • Tu ne peux utiliser fseek() comme ça en mode texte, a priori tu es obligé à parcourir le fichier jusqu'à ce que tu rencontres ta valeur (ou passer par le mode binaire).
  • Personnellement j'évite les *scanf() mais je suis peut-être parano.

Ok pour les remarques, merci.
 
Par contre je ne vois pas directement le lien avec ma variable qui se prends pour copperfield.  
 
ps : je ne peux pas parcourir le fichier jusqu'a ce que je rencontre la valeur car aucun ID ne se trouve devant la valeur, je sais juste qu'elle est a 177 caractères après le début.
pss : j'ai rajouter un getchar() pour faire des pauses et voir toutes mes variables, et voila ce qui se passe :
 

i : 198, nbpts : 319
 
i : 199, nbpts : 319
 
i : 200, nbpts : 319
 
i : 201, nbpts : 1144542659
 
i : 202, nbpts : 1144542659
 
i : 203, nbpts : 1144542659


 
Bon je vous met l'initialisation de ma structure, on sait jamais :
 

structure_s *my_struct;
 my_struct = malloc(sizeof(structure_s));
 
 get_points("/home/julien/7.pts", my_struct);


 
 
Est-ce que c'est possible d'avoir fait un mauvais ou ommis un malloc, ainsi la place mémoire de la variable my_struct->i_nb_pts_gauche serait écransée....?
Perdu.com


Message édité par jijiz le 29-04-2008 à 16:53:01
n°1726401
jijiz
Posté le 29-04-2008 à 16:58:07  profilanswer
 

Bon, c'est sur c'est ce code :
 

 fscanf(fic,"     %f     %f      %f      %f      %f",  
   &poubelle1,
   &poubelle2,
   &poubelle3,
   &my_struct->t_pts_gauche[i][0],  
   &my_struct->t_pts_gauche[i][1]);


 
qui modifie ma variable, je ne comprends pas pourquoi ni comment, mais lorsque je le retire, la variable conserve sa valeur..
 
Par quoi remplacer ce scanf et le fseek??


Message édité par jijiz le 29-04-2008 à 16:59:53
n°1726404
_darkalt3_
Proctopathe
Posté le 29-04-2008 à 17:01:36  profilanswer
 

utilise le débugger pour voir ?


---------------
Töp of the plöp
n°1726418
tpierron
Posté le 29-04-2008 à 17:17:15  profilanswer
 

100% de chance pour que tu as dans ton code un truc du genre :
 
#define MAXPTS     200
 
Je te laisse bucher pour savoir ce qui merde ensuite. (Hint: buffer overflow).

n°1726705
jijiz
Posté le 30-04-2008 à 09:11:34  profilanswer
 

tpierron a écrit :

100% de chance pour que tu as dans ton code un truc du genre :
 
#define MAXPTS     200
 
Je te laisse bucher pour savoir ce qui merde ensuite. (Hint: buffer overflow).


 
 
Hmmmm, ok merci vais demander à google s'il en sait un peut plus sur le buffer overflow. JE M EN VEUX. :o)
J'espere que je vais devenir bon un jour en prog (il faudrait assez vite) ^


Message édité par jijiz le 30-04-2008 à 09:20:44
n°1726714
jijiz
Posté le 30-04-2008 à 09:23:25  profilanswer
 

Encore merci tpierron et à tout le monde.


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

  Mais où est passée ma variable? [Resolu]

 

Sujets relatifs
[Résolu] gestion mémoire en java[Résolu][VB-Excel-Macro]Boucle qui ne boucle pas.
[Résolu] Variables de Variables ...Problème erreur if
[Résolu] Besoin d'aide pour syntaxe expression régulière[CSS] Style different pour chaque élément du menu [résolu]
[Résolu 2 fois ;)] script PHP liste deroulante et base de donnéesproblème avec un formulaire [résolu]
[ PHP ] [ RESOLU ] Envoyer des mail hotmail avec php[RESOLU] [D7] AllocMem ne fonctionne plus !
Plus de sujets relatifs à : Mais où est passée ma variable? [Resolu]


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