C 分段故障
可能重复:C 分段故障,c,segmentation-fault,C,Segmentation Fault,可能重复: 如果我遇到这样的错误,如何调试它?请给出一些调试此错误的方法: *** 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
如果我遇到这样的错误,如何调试它?请给出一些调试此错误的方法:
*** 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
在(gcc-g*.c
)上使用debug构建,然后查看堆栈
具体来说,此错误是因为在错误指针上调用了free
一些代码可能会帮助我们更具体地查看您的问题。使用debug on(gcc-g*.c
)构建,然后查看您的堆栈
具体来说,此错误是因为在错误指针上调用了free
一些代码可能会帮助我们更具体地了解您的问题。您可能会发现调试此类错误的最简单方法是使用调试器 正如Starkey建议的那样,确保在编译时启用调试符号(通过gcc的
-g
选项)
您可能会发现,当您的程序因分段错误而崩溃时,它生成了一个核心文件。您可以使用调试器(例如)打开核心文件并调查调用堆栈。使用调试器的优点是(如果启用了调试符号),它将显示源文件中的行号,而不仅仅是提供内存位置
如果没有核心文件,您可以从gdb中运行应用程序,然后重新生成分段错误。您可能会发现调试此类错误的最简单方法是使用调试器 正如Starkey建议的那样,确保在编译时启用调试符号(通过gcc的
-g
选项)
您可能会发现,当您的程序因分段错误而崩溃时,它生成了一个核心文件。您可以使用调试器(例如)打开核心文件并调查调用堆栈。使用调试器的优点是(如果启用了调试符号),它将显示源文件中的行号,而不仅仅是提供内存位置
如果您没有核心文件,您可以从gdb中运行应用程序,然后重新生成分段错误。问题出在您的代码中,请将其显示给我们
***glibc detected***./a.out:free():无效指针:0x0821b158***
当free()抱怨无效指针时,检查对free()
的调用,你可能试图释放一些没有被malloc'ed的东西,或者可能释放两次相同的内存。公平地说,@lal实际上问如何调试他的问题,不是我们解决的。@BlackBear这是我之前提出的问题,但我没有得到帮助,所以我想从最好的方面了解如何解决这个问题,并再次尝试堆栈溢出中建议的方法问题在您的代码中,请向我们展示***glibc detected***./a.out:free():无效指针:0x0821b158***
检查您对free()的调用
当free()抱怨指针无效时,您可能试图释放一些未被malloc'ed的内容,或者可能释放相同的内存两次。公平地说,@lal实际上询问了如何调试他的问题,不是我们解决了它。@BlackBear这是我之前提出的问题,但我没有得到帮助,所以我想从最好的方面了解如何解决这个问题,并再次尝试stack overflow@Starkey:我已经在这个链接中提供了代码。这是我之前提出的问题但是我没有得到帮助,所以我想从最好的人那里得到一些想法如何解决这个问题,并再次尝试stack overflow@Starkey中建议的方法:我在这个链接中提供了代码。这是我之前提出的问题,但我没有得到帮助,所以我想从最好的人那里得到一些想法如何解决这个问题解决此问题,然后再次尝试堆栈溢出中建议的方法