Bonjour à tous,
Lors de la phase de débogage, et en sortie de fonction, j'obtiens le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Windows has triggered a breakpoint in Interface.exe
This may be due to a corruption of the heap, and indicates a bug ...patati, patata
A quoi cela peut-il être dû ?

Je précise que je travaille sous Visual Studio 2005.

Voici le code qui pose problème. La fonction appelante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
	if ((CDlgIdentification::Verification(m_strIdent,m_strPasswd)) == TRUE){
et le code de la fonction Verification est le suivant :
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;
}
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.

C'est au moment du "return TRUE" ou "return FALSE" que ca plante.

Merci pour vos réponses.