[MFC] Problème de mémoire lors de l'exécution d'une application
Salut,
J'ai développé un programme sous Visual C++ qui utilise les éléments de la classe CDC (classe pour dessiner dans l'application). Quand je lance l'éxécutable, au bout d'une cinquantaine de minutes, mon programme plante !:cry:
J'ai regardé d'où pouvait venir mon problème et ... j'ai un élément de réponse : quand je lance le gestionnaire de tâches de Windows, je constate que l'espace mémoire utilisée par mon application augmente de 4KiloOctets de façon régulière (ce qui, au cumulé de l'éxecution de mon application, mon programme plante !)
Dans mon programme, j'appelle toutes les 2 secondes la fonction suivante dans un thread :
Code:
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
| void CMyApp::DrawLongitudinalAxis(CStatic* area,int min,int max,char nbraxis)
{
CDC* ChartCDC; //Déclaration d'un Device Context
CRect ChartRect;//Déclaration d'un rectangle englobant
CPen aPen; //Déclaration d'une plume
CString Etiquette;//Déclaration d'une variable de type String
area->Invalidate(TRUE);
ChartCDC = area->GetDC(); //Affectation de la zone de dessin à la variable ChartCDC
area->GetClientRect(&ChartRect); //Affectation du rectangle englobant du graphique à la variable area
ChartRect.DeflateRect(1,1);
ChartCDC->SetBkMode(TRANSPARENT);
ChartCDC->SetTextAlign(TA_LEFT);
aPen.CreatePen(PS_DASHDOT,1,RGB(255,0,0));
ChartCDC->SelectObject(&aPen);
ChartCDC->MoveTo(0,ChartRect.Height()-5*(ChartRect.Height()/(nbraxis-1)));
ChartCDC->LineTo(ChartRect.Width(),ChartRect.Height()-5*(ChartRect.Height()/(nbraxis-1)));
Etiquette.Format("%.0f",(float)5*(max-min)/(nbraxis-1)+min);
ChartCDC->TextOut(0,ChartRect.Height()-5*(ChartRect.Height()/(nbraxis-1))-7,Etiquette);
aPen.DeleteObject();
ChartCDC->ReleaseOutputDC();
area->ReleaseDC(ChartCDC);
} |
Je suis sûr que mon problème vient de là car quand j'enlève l'éxecution de cette fonction toutes les 2 secondes, mon programme ne plante pas et l'espace mémoire utilisé par mon application n'augmente pas.
C'est la première fois que je rencontre un problème de ce genre et je remercie d'avance tout ceux qui pourront m'aider.