BeginPaint, EndPaint, PAINTSTRUCT- wyciek pamięci

0

Witam. Przyczyna na pewno jest banalna, ale ja nie potrafię jej znaleźć.
Postanowiłem, że napiszę Snake'a w asemblerze i go piszę.

Problem jest tutaj:

	push paintStruct
	push edx ; hwnd
	call [BeginPaint]
	mov dword [hdc], eax

	push paintStruct
	push edx
	call [EndPaint]
	
	; .......

	struc PAINTSTRUCT
		.hdc		 resb 4
		.fErase 	 resb 4
		.left		 resb 4
		.top	   	 resb 4
		.right		 resb 4
		.bottom       resb 4
		.fRestore	 resb 4
		.fIncUpdate	 resb 4
		.rgbReserved resb 32
	endstruc 
	
	paintStruct istruc PAINTSTRUCT
	iend

Jest to na razie jedyny kod, który jest wykonywany po otrzymaniu WM_PAINT.
No i w miarę czasu działania programu, ilość zużywanej przez niego pamięci rośnie.
Kiedy zamiast wskaźnika do paintStruct podam 0, pamięć nie rośnie.

Pomimo tego wycieku, ten kod działa gdy dodam tam wyświetlanie bitmapy czy rysowanie linii.

0
cnyk napisał(a):

Przyczyna na pewno jest banalna, ale ja nie potrafię jej znaleźć.

Naucz się korzystać z debuggera, zobaczysz jakie funkcje kończą się z błędem. W podanym kodzie widać tylko jeden problem, rejestry eax, ecx i edx nie są zzachowywane podczas wywołań funkcji systemowych, BeginPaint prawdopodobnie zmienia wartość edx, przez co przekazujesz niewłaściwą wartość do EndPaint.

1 użytkowników online, w tym zalogowanych: 0, gości: 1