[C++] Bug en release et pas en debug (Visual C++)

Bug en release et pas en debug (Visual C++) [C++] - C++ - Programmation

Marsh Posté le 08-07-2004 à 21:31:03    

Bonjour à tous.
 
Voila ... j'étais assez fier d'un truc que j'ai fait en c++. j'ai donc voulu voir ce que cela allait donné en "release", m'attendant inévitablement à des erreurs, particulierement de mémoire.
 
Apres un premier test, j'ai été surpris de voir que mon appli s'arretait en cours de route, sans signaler d'erreur. Apres avoir vaguement localié la zone d'arret, je modifie les parametres d'optimization, pour le mettre en "default". Et là, "enfine une erreur, une vraie, d'acces mémoire.
 
Me voilà donc avec mes "cout << "toto"" partout, pour essayer de tracer. ce n'est surement pas la meilleure méthode, mais c'est la seule qui m'est venue.
 
J'arrive donc à ces lignes là :
 

Code :
  1. while(fantaSource.getline(tampon,256))
  2. {
  3. cout << "dedans\n";
  4. Joueur temp = Tokenize(tampon);
  5. cout << "nom" << temp.nom;
  6. joueurVecteur.push_back(temp);
  7. cout << "apres le pushback";
  8. }


 
et
 

Code :
  1. Joueur SourceListe::Tokenize(char* p_ligneFichier)
  2. {
  3. char decompos[6][256];
  4. int i = 0;
  5. int j = 0;
  6. int k = 0;
  7. Joueur result;
  8. cout << "dans le tokenize\n";
  9. while((p_ligneFichier[i]!='\n') && (p_ligneFichier[i]!='\0'))
  10. {
  11. cout << i << " " << j << " " << k << " " << p_ligneFichier[i] <<"\n";
  12. if ((j>=7)||(k>=256))
  13. throw FormatError(); // Le fichier est mal formé
  14. if (p_ligneFichier[i] ==',')
  15. {
  16. decompos[j][k]='\0'; // l'info en cours est terminée
  17. j++; // on passe à la prochaine info
  18. k = 0;
  19. i++;
  20. }
  21. else
  22. {
  23. decompos[j][k]=p_ligneFichier[i];
  24. i++;
  25. k++;
  26. }
  27. }
  28. decompos[j][k]='\0';
  29. if (j!=6)
  30. throw FormatError(); // Le fichier est malformé
  31. cout << "au milieu tokenize\n";
  32. result.indice = decompos[0];
  33. result.nom = decompos[1];
  34. result.club = decompos[2];
  35. result.poste = decompos[3];
  36. result.valeur = decompos[4];
  37. result.dispo = decompos[5];
  38. result.proprio = decompos[6];
  39. cout << "avant le return\n";
  40. return result;
  41. }


Bref, là j'essaie de voir les différentes valeurs de i, j et k, puisque l'erreur semble apparaitre dans la boucle while de Tokenize.
"cout << i << " " << j << " " << k << " " << p_ligneFichier[i] <<"\n";"
 
Tokenize reçoit une ligne d'un fichier, la parcours et la décompose.
i désigne la position du caractere étudié dans la chaine fourni en argument. or, tout va bien jusqu'au 45ieme caractere ... puisqu'alors l'affichage m'indique que i est passé à 35, au lieun de 46. Il va sans dire que cela ne doit pas aider à faire fonctionner le zinzin ...
 
je suis repassé en debug, pour tracer, et ça passe bien le "46ieme caractere" ...
 
Une idée sur la raison du pourquoi du comment ?
 
PS : j'ai volontairement virer des constantes, et un peu "sali" le code, pour les phases de dubg du release ...

Reply

Marsh Posté le 08-07-2004 à 21:31:03   

Reply

Marsh Posté le 08-07-2004 à 21:33:16    

result.indice = decompos[0];  
 
 
tu vas ou là ?

Reply

Marsh Posté le 08-07-2004 à 21:54:33    

Taz a écrit :

result.indice = decompos[0];  
 
 
tu vas ou là ?


 
Bah je stocke ainsi un char* dans un string
 
(ouais, pardon, tous les membres de la classe Joueur sont des string)

Reply

Marsh Posté le 08-07-2004 à 22:29:14    

Attention :
char[] != char*

Reply

Marsh Posté le 08-07-2004 à 22:30:40    

char decompos[6][256];
result.proprio = decompos[6];
=> tu peux pas écrire decompos[6]


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 09-07-2004 à 00:08:26    

mais dégager mois tout c'est char machin :o

Reply

Marsh Posté le 09-07-2004 à 10:42:56    

Merci, je vais regarder tout ça :)

Reply

Sujets relatifs:

Leave a Replay

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