C 프로그램에서 메모리 누수를 감지합니까?
만약 우리가 C++ 프로그램에서 메모리 누수를 확인하고 싶다면, 우리는 오버로드를 할 수 있습니다.new그리고.delete할당된 메모리를 추적하는 연산자입니다.우리가 C 프로그램의 누수를 확인하고 싶다면 어떻게 해야 합니까?C에서 연산자 오버로드가 발생하지 않기 때문에 다음을 덮어쓸 수 있습니까?malloc함수 포인터: 호출을 가로채기malloc그리고 메모리 할당을 추적합니까?외부 유틸리티를 사용하지 않고 더 쉬운 방법이 있습니까?제가 덮어쓰기 메서드 포인터에 익숙하지 않아서 코드를 좀 제공해주세요.
참고: 저는 연습을 위해 외부 유틸리티 없이 이 작업을 수행하고 싶습니다.
제안된 바와 같이, 이를 수행할 수 있는 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여기서 연결된 목록에 대해 해제를 요청하는 주소 항목을 확인합니다.일치하는 항목이 없으면 사용 오류이며 플래그를 지정할 수 있습니다.
프로그램이 끝나면 연결된 목록의 내용을 로그 파일에 인쇄하거나 씁니다.누출이 없으면 연결된 목록에 항목이 없어야 하지만 누출이 있으면 로그 파일이 메모리가 할당된 정확한 위치를 제공합니다.
이 매크로 트릭을 사용하면 어떤 기능을 제공하는지 확인하는 유형이 사라지지만, 제가 자주 사용하는 깔끔한 작은 트릭입니다.
이것이 도움이 되기를 바라고 좋은 일만 가득하길 바랍니다 :)
발그린드가 당신에게 필요한 것입니다.
저는 비록 코드를 포함하지 않았지만 이것에 대해 이야기한 호두껍질의 알고리즘의 첫 장을 읽은 것을 기억합니다.흥미로울 때를 대비해 추가했습니다.
c에서 연산자 오버로드가 없기 때문에 malloc 함수 포인트를 덮어써 malloc에 대한 호출을 가로채고 메모리 할당을 추적할 수 있습니다.
사실, 할 수 있어요.LD_PRELOAD를 읽습니다.
gnu 소 @Als 답 @Als 외 도 를 만 약 gnu 한 다 면 에 용 신 이 당 사 스 변 의 코 의 드 감ld당신은 링커가 모든 통화를 감쌀 수 있습니다(가능하면).malloc,realloc,calloc,그리고.free시간에 (서 왔는지에 링크 시간에 제공됩니다. 출처에 관계없이.그리고 당신은 글을 씁니다.__wrap_malloc등으로 원래 함수를 호출할 수 있습니다. 예를 들어,__real_malloc.
» --wrap=symbolhttp://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html 에서
공유 라이브러리의 호출에서 이 기능이 어떻게 작동하는지 모르겠습니다.그렇지 않은 것 같아요.
Xilinx SDK gcc를 사용하여 Xilinx Zynq 베어메탈에서 작동한 mallinfo 함수를 사용합니다.저는 의도적인 메모리 누수로 테스트를 했습니다. 왜 그런지 모르겠지만 구글 결과는 이 솔루션이 다른 개발자들을 돕기 위해 입소문을 퍼뜨리는 것에 대해 믿을 수 없을 정도로 끔찍했습니다!
언급URL : https://stackoverflow.com/questions/9074229/detecting-memory-leaks-in-c-programs
'programing' 카테고리의 다른 글
| 구성 파일, 환경 및 명령줄 인수를 구문 분석하여 단일 옵션 모음을 가져옵니다. (0) | 2023.07.28 |
|---|---|
| 하위 요소에 따라 요소에 CSS 스타일 적용 (0) | 2023.07.28 |
| 창을 색상으로 채움 (0) | 2023.07.28 |
| 왜 CSS는 가짜 요소와 함께 작동합니까? (0) | 2023.07.28 |
| NPM에서 종속성을 설치할 수 없음 - 잠기지 않은 항목의 잠금을 해제하려고 합니다. (0) | 2023.07.28 |