*** glibc detected *** free(): invalid pointer

Linux libc (5.4.23 이후)의 최근 버전과 GNU libc (2.x) 버전은 환경 변수를 통해 조정할수 있는 malloc 수행을 포함한다. MALLOC_CHECK_ 이 설정되었다면, 특별한 (덜 효율적이지만) 행동이 행해지며, 이것은 같은 인자를 가지고 free() 를 두번 호출하거나 단일 바이트(off-by-one 버그)의 초과 같은 간단한 에러에 대한 안전을 위해 디자인되었다. 그러나 그런 에러들은 항상 보호되지는 않으며 메모리 누수가 생길 수 있다. 만일 MALLOC_CHECK_ 을 0 으로 설정하면, 발견된 힙 오염은 무시된다; 만일 1 로 설정하면, 진단은 stderr로 출력된다; 만일 2 로 설정하면, abort() 가 즉시 호출된다. 이것은 유용하다. 왜냐하면 크래쉬가 나중에 생길것이고 문제의 원인을 찾아가는것이 매우 어려워지기 때문이다.

Glibc 에 “sanity check” 라는 메커니즘이 있습니다.
비정상적인 메모리를 free 하는 과정에서 메모리 손상 가능성을 검사하는 기능입니다.
프로그램이 메모리 손상을 감지하면 다음과 비슷한 메시지를 뿌리고 죽습니다.

"MALLOC_CHECK_" 환경 변수를 수정해 주면 됩니다. 이 변수의 기본값은 3 입니다.
만약 export MALLOC_CHECK_=0 라고 설정하면 에러 메시지 표시도 않고 프로그램이 죽지도 않습니다.

설정값은 0~3 까지 가능합니다.

0 … 아무것도 하지 않고 프로그램 동작함.
1 … 에러 메시지가 출력.
2 … 아무런 메시지 없이 프로그램이 종료.
3 … 에러 메시지를 출력하고, 프로그램이 종료

*** glibc detected *** free(): invalid pointer

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다