우리는 테스트중인 코드에서 메모리 누수를 감지하기 위해 Win32 _CrtMemCheckpoint
/_CrtMemDifference
메서드를 사용하는 몇 가지 단위 테스트를 수행합니다. x64 시스템 (Windows 7)에서 이러한 테스트 중 일부는 x86 (32 비트) 시스템에서보고되지 않는 메모리 누수를보고합니다. VS2008 또는 VS2012 중 하나에 다음 코드를 컴파일하고 부스트 1.52.0를 사용하여 이러한 64 기계,에, 결과는 "메모리 누수 감지!"입니다 :boost :: filesystem :: path 메모리 차이를 야기 함
#include <boost/filesystem.hpp>
#include <crtdbg.h>
int main(int argc, char **argv)
{
_CrtMemState state1, state2, state3;
_CrtMemCheckpoint(&state1);
{
boost::filesystem::path remoteDirPath("c:/");
}
_CrtMemCheckpoint(&state2);
int res = _CrtMemDifference(&state3, &state1, &state2);
if (res != 0)
{
_CrtDumpMemoryLeaks();
std::cout << "Memory leak detected!";
}
}
부스트 : : 파일 시스템이 실제로 메모리 누수가 : :통로?
int main(int argc, char **argv)
{
{
boost::filesystem::path initDummy("c:/");
}
_CrtMemState state1, state2, state3;
_CrtMemCheckpoint(&state1);
{
boost::filesystem::path remoteDirPath("c:/");
}
_CrtMemCheckpoint(&state2);
int res = _CrtMemDifference(&state3, &state1, &state2);
if (res != 0)
{
_CrtDumpMemoryLeaks();
std::cout << "Memory leak detected!";
}
}
은 "메모리 누수가 감지되었습니다!"라는 메시지를 출력하지 않기 때문에 일부 라이브러리 초기화 또는 그럴 것 같습니다.
내 질문은 : 어떻게 단위 테스트와 같은 문제를 피할 수 있습니까? 솔루션 테스트를 시작하기 전에 이러한 변수를 초기화합니까? 다른 코드를 사용할 때 더 많은 일을해야합니까? 아니면 일반적으로 그런 테스트를하는 것은 나쁜 생각입니까?
의견을 보내 주셔서 감사합니다.