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.