그냥 사는 이야기

LoadLibrary() / FreeLibrary() 에서 memory leak 발생 본문

Development/System

LoadLibrary() / FreeLibrary() 에서 memory leak 발생

없다캐라 2009. 7. 17. 10:07
반응형

LoadLibrary/FreeLibrary memory leak

실행 환경

  • Windows Server 2008 x64
  • MS Visual-Studio 2008

Test Code

먼저 메모리릭이 나는 코드를 간단하게 보면

while (1)
{
	HMODULE hModule = LoadLibrary ( "C:\\Windows\\servicing\\cbsmsg.dll" );

	if ( hModule )
	{
		FreeLibrary( hModule );
	}
	else
	{
		cout << GetLastError() << endl;
	} 
}

DLL 라이브러리를 로드해주는 루틴이다. load 함수와 동시에 free를 해주는 구조로 계속 looping을 돌렸다.

Error Code 193

그런데 문제는 실제 load는 실패하고 있었다. 그래서 hModule은 NULL 을 가지게 되었고 error code는 아래의 193을 뱉는다.

Windows error code 193

그런데 조사해보면 메모리는 자꾸 늘어난다. debug를 위해 breaking를 걸어두면 늘지 않는데 debug모드가 아니면 쭉쭉 늘어나버린다. 당분간 진행은 여기서 홀딩 시켜두고 틈틈이 관련있는 내용을 찾아봐야겠다.

http://pallas.egloos.com/1299794 ansi 혹은 유니코드의 빌드 바이너리의 character set이 다른 경우도 leak이 발생하는 것 같다. 내 문제도 이런 경우인가???

Comments