Mam pewien problem, ponieważ mój program w WinAPI po pewnym czasie użytkowania się zawiesza, odkryłem, że ma to związek z wyciekiem pamięci. W chwili uruchomienia program zajmuje około 2mb w pamięci, a potem systematycznie ilość zajmowanej pamięci się zwiększa - dzieje się tak, kiedy w oknie ruszam myszą, kiedy kursor jest nieruchomy, przyrost pamięci jest dużo mniejszy.
W mojej funkcji WndProc mam następujące zmienne:
static char C[100];
static LOGFONT lfms1 = logfont(24,0,"A");
static LOGFONT lfms2 = logfont(16,0,"A");
static LOGFONT lfms = logfont(20,0,"C");
static RECT rec1 = {0,37,600,84};
static RECT rec2 = {0,0,600,34};
static RECT rec3 = {0,87,600,150};
HDC hdc = GetDC(hwnd);
static PAINTSTRUCT ps;
a obsługa komunikatu WM_PAINT wygląda tak:
case WM_PAINT:
InvalidateRect(hwnd,0,FALSE);
hdc = BeginPaint(hwnd,&ps);
FillRect(hdc,&rec1,CreateSolidBrush(0xEFEFEF));
FillRect(hdc,&rec2,CreateSolidBrush(0xFFFFFF));
FillRect(hdc,&rec3,CreateSolidBrush(0xFFFFFF));
sprintf_s(C,100,"Blablabla");
text(hdc,lfms1,navy,white);
TextOut(hdc,12,6,C,strlen(C));
sprintf_s(C,100,"Blablabla");
text(hdc,lfms2,navy,white);
TextOut(hdc,12,96,C,strlen(C));
sprintf_s(C,100,"Blablabla");
text(hdc,lfms2,navy,white);
TextOut(hdc,476,96,C,strlen(C));
MoveToEx(hdc,0,35,0);
LineTo(hdc,600,35);
MoveToEx(hdc,0,85,0);
LineTo(hdc,600,85);
GetFocus();
EndPaint(hwnd,&ps);
break;
Kiedy usunę zmienne i obsługę WM_PAINT problem znika - pamięć nie rośnie. Da się to w jakiś sposób 'naprawić'? Zmienne są przecież staticami, więc nie powinno się tak dziać, chyba, że ja coś mylę...