2014-02-07 1 views
4

저는 처음으로 valgrind를 확인하려고합니다. 그러나 현재 결과가 마음에 들지만 valgrind가 항상 발생하는 메모리 누수를 반환하는지 또는 궁금합니다. 일부 프로그램에서 벗어날 수있는 경우 프로그램이 종료되는 방식에 따라 특수성이 있습니다. 예를 들어, 'killall -9 program'을 사용하여 프로그램을 종료 한 경우.valgrind가 기존의 누설/오류를보고하지 않는다는 조건이 있습니까?

가 여기 내 현재 프로그램의 결과이다이 결과는 말 그대로 제로 누수 또는 컨텍스트 오류가 있음을 확인 하는가, 우분투 시스템 모니터

==10182== HEAP SUMMARY: 
==10182==  in use at exit: 0 bytes in 0 blocks 
==10182== total heap usage: 8,747,225 allocs, 8,747,225 frees, 1,352,535,387 bytes allocated 
==10182== 
==10182== All heap blocks were freed -- no leaks are possible 
==10182== 
==10182== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 

에서 '프로세스 끝내기'를 사용하여 중지?

+1

나는 "출구에서 사용 중"에 덜주의를 기울이고, allocs와 frees의 수가 일치한다는 사실에 더주의를 기울일 것입니다. 즉, 전체 힙/풀이 해제 될 때까지 누출 된 메모리가 없었 음을 의미합니다. 모든 것이 정확하고 개별적으로 해제되었습니다. –

+0

@BenVoigt - 답변에서 확장 할 수 있습니까? – Jason

+0

시스템 모니터가 보내는 신호를 모르겠습니다. 명령 프롬프트에서'kill -TERM pid' 또는'kill -KILL pid'를 사용하십시오. 첫 번째는 valgrind가 추적 할 종료 논리를 트리거해야합니다. 두 번째 경우에는 프로세스와 호스트하는 valgrind 라이브러리가 사라집니다. 누수를보고 할 기회는 없습니다. –

답변

0

this에 따르면 Vallgrind는 경계 밖으로 벗어난 스택을 감지 할 수 없으며 반환 이후에 전역에서 사용할 수 없습니다.

+0

고맙습니다.하지만 저는 아직 명확하지 않습니다. 예를 들어 속성을 초기화하지 못했고 객체 소멸자가 호출 될 때 컨텍스트 오류가 발생했습니다. 이것은 내가 'killall'을 사용했을 때 발생하지 않았지만 처음으로 'end process'를 사용했습니다. 이것은 파괴 할 마지막 대상이었을 것입니다. valgrind가 여전히이 시점에서 메모리 문제를보고 할 수 있다고 가정하는 것이 잘못 되었습니까? – Jason

+0

아, 아마도 당신의 질문을 오해했을 것입니다. – TNA