C++에서 메모리 누출 문제를 해결하려고하는데 비교적 C++에 익숙하지 않은 것 같습니다. 어리석은 일입니다. 나는 화면 캡쳐를하는 코드를 가지고 있으며, 그때 내가 조작 할 이미지를위한 메모리를 할당하고있다. 여기에 몇 가지 관련 코드는 다음과 같습니다메모리가 해제되지 않는 이유는 무엇입니까?
RGBTRIPLE* ScreenShot(char *BmpName, DWORD &height, DWORD &width, char* bmpToFree){
DWORD FileSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+(sizeof(RGBTRIPLE)+1 * (Width*Height * 4));
char *BmpFileData = (char*)GlobalAlloc(0x0040, FileSize);
// Some code
BitBlt(CaptureDC, 0, 0, Width, Height, DevC, 0, 0, SRCCOPY | CAPTUREBLT);
GetDIBits(CaptureDC, CaptureBitmap, 0, Height, Image, (LPBITMAPINFO)BInfoHeader, DIB_RGB_COLORS);
height = Height;
width = Width;
bmpToFree = BmpFileData;
DeleteObject(CaptureBitmap);
DeleteObject(CaptureDC);
}
난 아직도 내가이 줄 또 다른 포인터 포인터를 통과하는 참조를 유지하므로 다른 방법이 데이터로 작업해야하기 때문에 당신은 내가 GlobalFree(BmpFileData)
와 BmpFileData을 확보하고 있지 않다 볼 수 있듯이 bmpToFree = BmpFileData;
그래서 지금은이 데이터에 어떤 일을하고 나는이 길에 GlobalFree()
를 사용
char* bmpToFree = NULL;
RGBTRIPLE *image = ScreenShot("Prueba.bmp", h, w, bmpToFree);
// Do some work
GlobalFree(bmpToFree);
을하지만이 방법에 난 메모리 누수를있다. 대신 GlobalFree(BmpFileData)
을 Screenshot()
메서드 안에 넣으면 내 누출은 없어지지 만 작업 할 데이터가 없습니다.
내가 뭘 잘못하고 있니?
메모리 누수가 있음을 어떻게 알 수 있습니까? – Floris
몇 분 안에 프로그램을 시작하면 거의 모든 8Gb RAM을 사용합니다 – Andres