分段错误

可能重复:
btree实现中的分段错误

我得到这样的错误,我该怎么调试呢? 你能给一些方法来调试这个错误:

*** glibc detected *** ./a.out: free(): invalid pointer: 0x0821b158 *** ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6(+0x6b591)[0xbd7591] /lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0xbd8de8] /lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xbdbecd] ./a.out[0x80490c3] ./a.out[0x8048bdc] ./a.out[0x8048642] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb82bd6] ./a.out[0x80484b1] ======= Memory map: ======== 004e5000-00500000 r-xp 00000000 08:06 1192669 /lib/ld-2.11.1.so 00500000-00501000 r--p 0001a000 08:06 1192669 /lib/ld-2.11.1.so 00501000-00502000 rw-p 0001b000 08:06 1192669 /lib/ld-2.11.1.so 007aa000-007c7000 r-xp 00000000 08:06 1179731 /lib/libgcc_s.so.1 007c7000-007c8000 r--p 0001c000 08:06 1179731 /lib/libgcc_s.so.1 007c8000-007c9000 rw-p 0001d000 08:06 1179731 /lib/libgcc_s.so.1 0096b000-0096c000 r-xp 00000000 00:00 0 [vdso] 00b6c000-00cbf000 r-xp 00000000 08:06 1311379 /lib/tls/i686/cmov/libc-2.11.1.so 00cbf000-00cc0000 ---p 00153000 08:06 1311379 /lib/tls/i686/cmov/libc-2.11.1.so 00cc0000-00cc2000 r--p 00153000 08:06 1311379 /lib/tls/i686/cmov/libc-2.11.1.so 00cc2000-00cc3000 rw-p 00155000 08:06 1311379 /lib/tls/i686/cmov/libc-2.11.1.so 00cc3000-00cc6000 rw-p 00000000 00:00 0 08048000-0804a000 r-xp 00000000 08:06 393339 /home/user/Desktop/a.out 0804a000-0804b000 r--p 00001000 08:06 393339 /home/user/Desktop/a.out 0804b000-0804c000 rw-p 00002000 08:06 393339 /home/user/Desktop/a.out 0821b000-0823c000 rw-p 00000000 00:00 0 [heap] b7600000-b7621000 rw-p 00000000 00:00 0 b7621000-b7700000 ---p 00000000 00:00 0 b7708000-b7709000 rw-p 00000000 00:00 0 b771a000-b771e000 rw-p 00000000 00:00 0 bfc39000-bfc4e000 rw-p 00000000 00:00 0 [stack] Aborted 

您可能会发现调试此类错误的最简单方法是使用调试器。

正如Starkey建议的那样,确保在编译时启用调试符号(通过gcc的-g选项)。

您可能会发现,当您的程序因分段故障而崩溃时,它会生成一个核心文件。 您可以使用调试器(例如.gdb )打开核心文件并调查调用堆栈。 使用调试器的优点是它(如果您已启用调试符号)将显示源文件中的行号,而不仅仅是提供内存位置。

如果您没有核心文件,则可以在gdb中运行应用程序,然后重现分段错误。

使用debug( gcc -g *.c )构建,然后查看堆栈。

特别是这个错误是因为你在错误的指针上调用了free

某些代码可能会帮助我们更具体地查看您的问题。