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 :
- while(fantaSource.getline(tampon,256))
- {
- cout << "dedans\n";
- Joueur temp = Tokenize(tampon);
- cout << "nom" << temp.nom;
- joueurVecteur.push_back(temp);
- cout << "apres le pushback";
- }
|
et
Code :
- Joueur SourceListe::Tokenize(char* p_ligneFichier)
- {
- char decompos[6][256];
- int i = 0;
- int j = 0;
- int k = 0;
- Joueur result;
- cout << "dans le tokenize\n";
- while((p_ligneFichier[i]!='\n') && (p_ligneFichier[i]!='\0'))
- {
- cout << i << " " << j << " " << k << " " << p_ligneFichier[i] <<"\n";
- if ((j>=7)||(k>=256))
- throw FormatError(); // Le fichier est mal formé
- if (p_ligneFichier[i] ==',')
- {
- decompos[j][k]='\0'; // l'info en cours est terminée
- j++; // on passe à la prochaine info
- k = 0;
- i++;
- }
- else
- {
- decompos[j][k]=p_ligneFichier[i];
- i++;
- k++;
- }
- }
- decompos[j][k]='\0';
- if (j!=6)
- throw FormatError(); // Le fichier est malformé
- cout << "au milieu tokenize\n";
- result.indice = decompos[0];
- result.nom = decompos[1];
- result.club = decompos[2];
- result.poste = decompos[3];
- result.valeur = decompos[4];
- result.dispo = decompos[5];
- result.proprio = decompos[6];
- cout << "avant le return\n";
- return result;
- }
|
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 ...