질문과 답변

윈도우즈API 2권 1474p질문드립니다. 날짜:2024-8-16 10:48:43 조회수:677
작성자 : 황금가물치
포인트 : 86
가입일 : 2022-05-06 15:33:18
방문횟수 : 69
글 12개, 댓글 13개
소개 : 안녕하세요. 윈도우즈api를 공부하기위하여 가입했습니다. 잘 부탁드립니다.
작성글 보기
쪽지 보내기
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {
    HDC hdc{};
    PAINTSTRUCT ps{};
    int i{};
    int* ptr = NULL;
    TCHAR str[128]{};

    switch (iMessage) {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        ptr = (int*)VirtualAlloc(NULL, sizeof(int) * 10, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
        if (ptr != NULL) {
            for (i = 0; i < 10; i++) {
                wsprintfW(str, TEXT("%d"), ptr[i] = i * 2);
                TextOut(hdc, 10, i * 20, str, lstrlenW(str));
            }
            VirtualFree(ptr, _msize(ptr), MEM_DECOMMIT); // C6250경고 표시
            VirtualFree(ptr, 0, MEM_RELEASE);
        }
        EndPaint(hWnd, &ps);
        return(0);
    case WM_DESTROY:
        PostQuitMessage(0);
        return(0);
    }
    DefWindowProcW(hWnd, iMessage, wParam, lParam);
}

밑줄그은 부분에서 자꾸만 C6250 메모리 누수 경고가 뜨는데 해결방법을 알고싶습니다. 분명 책에는 확정된 메모리를 해제하려면 확정 해제 후 예약해제라고 써 있는데 왜 메모리 누수 경고가 뜨는지 알고싶으며, 해결방법을 무엇인지 알고싶습니다.
답변부탁드립니다.
 



김민수
error code: 522 error code: 522

목록보기 삭제 수정 신고 스크랩

Program 9월22일 6:32:04  

VirtualAlloc 을 사용하지 말고 GlobalAlloc 을 사용해 보세요
TCHAR * ptr;
int i;

HGLOBAL hmem;
hmem=GlobalAlloc(GHND,128);//
if(hmem==NULL)
{
//MessageBox(L"텍스트파일 작업을 할 수 없읍니다 메모리할당 실패");
}
else
{
ptr=(TCHAR *)GlobalLock(hmem);
lstrcpy(ptr,L"");
for (i = 0; i < 10; i++)
{
wsprintfW(str, TEXT("%d"), ptr[i] = i * 2);
TextOut(hdc, 10, i * 20, str, lstrlenW(str));
}

GlobalUnlock(hmem);
GlobalFree(hmem);
}


로그인하셔야 댓글을 달 수 있습니다.