일부 프로그램에서는 할당 된 메모리 중 일부가 전혀 삭제되지 않지만 프로그램의 전체 런타임에 필요합니다. 따라서 일반적으로 안전하다고 간주됩니다.Valgrind를 사용하여 런타임 중에 실제 메모리 누수를 확인하는 방법은 무엇입니까?
그러나 프로그램의 전체 런타임에는 적합하지 않지만 개발자가 누락되어 파괴되지 않는 다른 개체가 있습니다. 이것은 실제 메모리 누수이며 해결되어야합니다.
다음 Valgrind 명령을 실행하면 프로그램 실행이 끝난 후 총 누수 만 표시됩니다. 따라서 누군가 Valgrind 누출 검사 출력에서 두 가지 시나리오를 구별하는 방법을 명확히 할 수 있습니까?
명령 메모리 누수를 감지하는 데 사용되었습니다.
valgrind --log-file=valgrind_output.txt --tool=memcheck --leak-check=yes ./MyTestProgram
실행 종료시의 일반적인 출력입니다.
==10108== LEAK SUMMARY:
==10108== definitely lost: 392,323 bytes in 1,164 blocks
==10108== indirectly lost: 178,120 bytes in 4,283 blocks
==10108== possibly lost: 170,155,118 bytes in 3,347,087 blocks
==10108== still reachable: 263,778,326 bytes in 3,935,669 blocks
현재 실행 중에 메모리 누수 감지 할 수있는 IBM 퓨리 도구 탭 같은 Valgrind의의 기능은 있습니까?
디버깅 및 누수 찾기 목적으로 기술적으로 쓸모가 없더라도 종료하기 전에 전역 변수를 할당 해제하는 것이 유용 할 수 있습니다. 실제로 이러한 변수가 간접적으로 메모리를 누출하고 있는지 알고 싶습니다 (예 : 메모리 누수 클래스를 캡슐화하는 클래스의 전역 인스턴스가있는 경우) –
은 다음과 같이 보입니다 : http://stackoverflow.com/q/7945885/476681 –
위의 주석에 대한 후속 후속 작업 ... 사소한 소멸자가있는 객체를 고려하십시오. 단지 메모리를 해제하는 것 이상을 수행하는 객체입니다. 소켓을 닫고, 데이터베이스에 위탁하는 것과 같은 것을 .. 그런 객체가 매달려 있다면 (예를 들어'new'을 통해 그것을 할당하고 결코'delete'를 호출하지 마십시오.), 그 소멸자는 결코 호출되지 않습니다 *, 심지어 프로세스가 종료 된 후에 OS가 메모리 공간을 정리합니다. 그렇기 때문에 그러한 밸 로그 린 누출은 심각하게 받아 들여 져야합니다. – DevSolar