제안한 바와 같이 Valgrind와 같은 우수한 도구가 이미 존재합니다. 또한
:
내가 연습 외부 유틸리티없이이 작업을 수행하고자하는
이 재미 있고 내가
당신은 메모리 사용량을 감지하는 매크로 트릭을 사용하여 수행 될 확신하고 누수 오류, 실제로 누설 감지기를 작성하십시오. 프로젝트에 할당 및 할당 취소 기능이 하나만 있으면이 작업을 수행 할 수 있어야합니다.
#define malloc(X) my_malloc(X, __FILE__, __LINE__, __FUNCTION__)
void* my_malloc(size_t size, const char *file, int line, const char *func)
{
void *p = malloc(size);
printf ("Allocated = %s, %i, %s, %p[%li]\n", file, line, func, p, size);
/*Link List functionality goes in here*/
return p;
}
할당 된 위치의 파일 및 줄 번호로 연결된 주소의 연결된 목록을 유지 관리합니다. malloc
의 항목으로 링크 목록을 업데이트합니다.
free
에 대한 구현을 작성하면 연결된 목록에 대해 해제하라는 메시지가 표시되는 주소 항목을 확인할 수 있습니다. 일치하는 항목이 없으면 사용 오류가 발생하여 플래그를 지정할 수 있습니다.
프로그램 끝에서 연결된 목록의 내용을 로그 파일에 인쇄하거나 쓰십시오. 누수가없는 경우 연결된 목록에 항목이 없어야하지만 누수가있는 경우 로그 파일은 메모리가 할당 된 위치의 정확한 위치를 제공합니다.
이 매크로 트릭을 사용하면 어떤 함수가 제공하는지 유형 검사를 잃게된다는 점에 유의하십시오. 그러나 나는 많은 시간을 사용하는 깔끔한 작은 트릭입니다.
희망이 도움 모든 최고의, 소스 코드에 전화를 포장 할 것이다 당신이 GNU ld
을 사용하는 경우, 당신은 링커가 모든 호출을 래핑 할 수 있습니다 @ 루게릭 병의 대답에 추가 :
Valgrind의 문제점은 무엇입니까? –
@MitchWheat 나는 외부 유틸리티를 사용할 수 없다고 언급했다. –
이것이 학습을위한 것이라면, valgrind가 어떻게하는지에 대해 배울 수있다. –