glibc检测到*** ./a.out:free():指针无效:

时间:2010-07-31 06:48:32

标签: c++ linux malloc

当我在linux中编译(c ++程序)时,我得到以下错误请帮助我

glibc detected *** ./a.out: free(): invalid pointer:0x0804878d ***
======= Backtrace: =========
/lib/libc.so.6[0xbd5f18]
/lib/libc.so.6(__libc_free+0x79)[0xbd941d]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x3233fe1]
./a.out(__gxx_personality_v0+0x100)[0x8048514]
./a.out(__gxx_personality_v0+0x176)[0x804858a]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb877e4]
./a.out(__gxx_personality_v0+0x5d)[0x8048471]
======= Memory map: ========
00b55000-00b6e000 r-xp 00000000 fd:00 6687029    /lib/ld-2.4.so
00b6e000-00b6f000 r-xp 00018000 fd:00 6687029    /lib/ld-2.4.so
00b6f000-00b70000 rwxp 00019000 fd:00 6687029    /lib/ld-2.4.so
00b72000-00c9e000 r-xp 00000000 fd:00 6687030    /lib/libc-2.4.so
00c9e000-00ca1000 r-xp 0012b000 fd:00 6687030    /lib/libc-2.4.so
00ca1000-00ca2000 rwxp 0012e000 fd:00 6687030    /lib/li

2 个答案:

答案 0 :(得分:3)

  

检测到glibc * ./a.out:free():指针无效:0x0804878d *

这意味着你可能delete指出了一个尚未使用new创建的指针。

如果您需要任何有用的帮助,您应该发布产生此问题的代码。

答案 1 :(得分:0)

如果查看堆栈跟踪的这两行,您将看到以0x8048000开头的页面必须是可执行的(因为该页面中的两个地址,0x8048514和0x804858a在堆栈上显示为返回地址)。

./的a.out(__ gxx_personality_v0 + 0x100的)[0x8048514] ./a.out(__ gxx_personality_v0 + 0x176)[0x804858a]

您尝试释放的地址0x0804878d位于同一页面的偏移量0x78d处,因此它可能指向代码并且明确指向可执行的页面。