c++ – How to track down a double free or corruption error

c++ – How to track down a double free or corruption error

If youre using glibc, you can set the MALLOC_CHECK_ environment variable to 2, this will cause glibc to use an error tolerant version of malloc, which will cause your program to abort at the point where the double free is done.

You can set this from gdb by using the set environment MALLOC_CHECK_ 2 command before running your program; the program should abort, with the free() call visible in the backtrace.

see the man page for malloc() for more information

There are at least two possible situations:

  1. you are deleting the same entity twice
  2. you are deleting something that wasnt allocated

For the first one I strongly suggest NULL-ing all deleted pointers.

You have three options:

  1. overload new and delete and track the allocations
  2. yes, use gdb — then youll get a backtrace from your crash, and thatll probably be very helpful
  3. as suggested — use Valgrind — it isnt easy to get into, but it will save you time thousandfold in the future…

c++ – How to track down a double free or corruption error

You can use gdb, but I would first try Valgrind. See the quick start guide.

Briefly, Valgrind instruments your program so it can detect several kinds of errors in using dynamically allocated memory, such as double frees and writes past the end of allocated blocks of memory (which can corrupt the heap). It detects and reports the errors as soon as they occur, thus pointing you directly to the cause of the problem.

Leave a Reply

Your email address will not be published.