Bonjour à tous,
Lors de la phase de débogage, et en sortie de fonction, j'obtiens le message d'erreur suivant :A quoi cela peut-il être dû ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Windows has triggered a breakpoint in Interface.exe This may be due to a corruption of the heap, and indicates a bug ...patati, patata
Je précise que je travaille sous Visual Studio 2005.
Voici le code qui pose problème. La fonction appelante :
et le code de la fonction Verification est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ((CDlgIdentification::Verification(m_strIdent,m_strPasswd)) == TRUE){
Je précise que, grâce à des breakpoints, j'ai pu voir que dans tous les cas (truc = 1,2 ou 3 c'est à dire si on a raté l'ouverture du fichier, si on a pas trouvé le bon couple ou dès qu'on a trouvé le bon identifiant) ca plante en sortie, puisque des breakpoints avant montrent que les variables sont bonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 bool CDlgIdentification::Verification(CString ident, CString passwd){ //Faire la vérification de l'identifiant et du mot de passe std::ifstream fichier( "C:\\Temp\\passe.bin"); int truc; if ( fichier ) // ce test échoue si le fichier n'est pas ouvert { std::string ligne; // variable contenant chaque ligne lue while ( std::getline( fichier, ligne ) ){ CCryptString OCrypt; CString passwddec; OCrypt.DecryptString((TCHAR *)ligne.c_str(), passwddec.GetBuffer(0),cryptkey); //décrypter la ligne lue CString Cligne (ligne.c_str());//copier le string en CString CString CligneTemp = Cligne; char* pWord=strtok(passwddec.GetBuffer(0), ";"); while (pWord !=NULL){ //Comparer avec l'identifiant pour le premier string basicstring(pWord); if (ident == pWord){ //Si c'est bon, on vérifie le mot de passe int i = 1; pWord = strtok(NULL, ";"); if (passwd == pWord){ i = 2; char *end; pWord = strtok(NULL,";"); compte.droit=pWord; truc = 1; return TRUE; } } //Sinon, ligne suivante break; } CligneTemp.ReleaseBuffer(); } truc = 2; return FALSE; //On a parcouru tout le fichier sans trouver le bon } truc = 3; //Ouverture du fichier ratée return FALSE; }
C'est au moment du "return TRUE" ou "return FALSE" que ca plante.
Merci pour vos réponses.
Partager