Bonjour.

J'ai un problème de fuite mémoire dans un code sous VC++6.
J'utilise un controle CWebBrowser, et a chaque fois que la fenetre est rafraichie (apres le rafraichissement pour etre precis) :

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
 
 
             lpDispatch = m_browser.GetDocument(); // m_browser est mon CWebBrowser2
	IHTMLDocument2 *doc2 = NULL;
	lpDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&doc2);
	if ( doc2 == 0 )
		return;
	IHTMLElement *lpBodyElement; 
	IHTMLBodyElement *lpBody; 
	IHTMLTxtRange *lpText; 		
	doc2->get_body(&lpBodyElement); 
	if ( lpBodyElement )
	{
		lpBodyElement->QueryInterface(IID_IHTMLBodyElement,(void**)&lpBody); 
		if ( lpBody )
		{
			lpBody->createTextRange(&lpText); 
			BSTR bstrText; 
			lpText->get_htmlText(&bstrText); 
 
                                      // mon traitement
Et je fini mon traitement avec :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
			lpBody->Release();			
			//delete(lpBody); 	
		}
		//delete(lpBodyElement);
		lpBodyElement->Release();
	}
	doc2->Release();
Ce qui devrait désaloué tout ce petit monde.
Pourtant, a chaque refresh de ma page web dans mon CWebBrowser, mon processus se prend entre 300 et 500k dans la figure... au bout de quelque heures d'utiilisation, mon processus pèse près de 70Mo alors qu'il en pesait 16 au lancement.
Compte tenu de la taille qu'il prend a chaque refresh, je suis persuadé que c'est le contenu HTML de la page web qui est chargée en mémoire qui n'est pas désaloué.

J'ai donc essayé des free() et des delete(), mais le résultat reste le même.
Etant expert en PHP, mais pas du tout en C, j'aurais vraiment besoin qu'on m'explique ce qui ne vas pas...


J'ai également essayé de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 // CString i2a(int); // converti un int en Cstring
	MessageBox(i2a((int)doc2));
	doc2->Release();
	free(doc2);
	MessageBox(i2a((int)doc2));
Pourtant, les 2 MessageBox m'affichent le même résultat... docs ne devrait-il pas etre égale à NULL apres le free ? même chose avec delete :/

Quelqu'un comprend t-il pourquoi ça fait ça.

Merci d'avance.

edit : il n'y a bien entendu pas de return dans le code

edit2 : j'ai coupé mon code trop tot pour voir le delete sur lpText, mais je l'avais testé aussi