当我在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
答案 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处,因此它可能指向代码并且明确指向可执行的页面。