나는 나의 Win32 응용 프로그램에서 파일을 열려면이 기능을 사용하고 있습니다 :파일 열기 대화 상자 및 메모리 누수
string OpenDialog(HWND hwnd)
{
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.hwndOwner = hwnd;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT("All files(*.*)\0*.*\0");
ofn.nFilterIndex = 1;
ofn.lpstrInitialDir = NULL;
ofn.lpstrFileTitle = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn))
return ofn.lpstrFile;
}
이 매우 간단하고, 내가 사용하여 전화 :
string path = OpenDialog(hwnd);
을 문제는이 함수가 많은 메모리 누수를 일으키는 것을 발견했습니다! 나는 무슨 일이 일어나고 있는지 확실하지는 않지만이 기능을 사용하여 새 파일을 열 때마다 내 응용 프로그램이 RAM에서 더 커지고 커집니다. 이 함수를 사용하여 파일을로드하지 않으면 안정적인 메모리로드가 발생했기 때문에 원인이이 함수인지 100 % 확신합니다.
힌트를주세요. 감사합니다.
'GetOpenFileName'이 0을 반환하면 함수가 정의되지 않은 동작을합니다. 이유는'GetOpenFileName'이 0을 반환하면'return' 값을 지정하지 않았기 때문입니다. – PaulMcKenzie
그래도 함수는이 경우에도 끝나기 때문에 가비지 컬렉터는 여전히 메모리를 해제해야합니다. –
값을 반환하지 못하는 함수를 작성하면 함수가 기술적으로 불완전하기 때문에 컴파일러는 해당 함수로 아무 것도 할 수 없습니다. GetOpenFileName이 0을 반환 할 때 return 문을 추가 한 다음 다시 테스트하면됩니다. 또한 간단한'int main()'함수로 프로그램을 테스트 했는가? 실제로 문제를 일으키는이 함수인지 확인하기 위해? – PaulMcKenzie