ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • glibc detected double free or corruption
    2013. 6. 1. 2 comments

     double free or corruption


    오류 중 쉽다고 생각했던 double free or corruption 문제의 원인을 찾는데 엄청난 시간이 걸림을 경험하고 나니, 다른 분들도 이런 경우를 고려해 봤으면 하는 바람에서 >글을 적는다.


    double free or corruption 오류는 메모리 오류로써 두가지 발생 케이스가 있다.

    1. passing the same address to free twice 
    2. overrunning an allocated area before passing its address to free.


    1번과 2번 모두 free라는 메모리 해제 시스템함수를 호출할 때 segfault가 발생합니다.

    이런 문제를 만나면 일단 free가 두 번되는 경우가 있는지를 빠르게 찾고, 그 다음부터는 마음을 차분히 갖고(제일 중요) gdb를 통하여 segfault 발생 위치와 관련되어진 메모리의 크기를 검토해보면 원인이 파악한다.


    내가 겪은 문제는 2번이다. free 함수에서 segfault가 발생하여 당연히 double free라고 생각했으나 결론적으로 사용해야 할 메모리 크기보다 더 크게 메모리를 사용하였고 free하는 순간 문제가 발생한 것이다.

    문제는 외부 프로그램으로부터 요청을 받으면  정보를 제공하는 프로그램이었는데, 버전에 따라서  제공되는 메모리 크기가 달라지는 경우가 발생했다. 자신이 요청을 받았을 때 요청해 줄 데이터의 전체 크기를 체크하는 기능이 필요해 보였다. 예전 버전을 지원하지 못하는 것은 이해되나, 죽어버리면 곤란하기 때문이다. 




     See also

    • http://www.valgrind.org/




    반응형

    댓글 2

Designed by Tistory.