我使用g ++编译我的程序。 我执行程序的时间占80%。我无法弄清楚内存映射的含义或解决方法。 这是输出:
*** glibc detected *** ./main: double free or corruption (!prev): 0x0881fdc8 ***
======= Backtrace: =========
[0x80da7f8]
[0x80dec69]
[0x80a5441]
[0x80a546d]
[0x8059227]
[0x8058b2f]
[0x8058f41]
[0x80567ec]
[0x80c075f]
[0x8048191]
======= Memory map: ========
00149000-0014a000 r-xp 00000000 00:00 0 [vdso]
08048000-08165000 r-xp 00000000 08:02 2101716 /home/armandmaree/Desktop/Projek_Fase2 (copy)/main
08166000-08168000 rw-p 0011d000 08:02 2101716 /home/armandmaree/Desktop/Projek_Fase2 (copy)/main
08168000-08170000 rw-p 00000000 00:00 0
09a45000-09a67000 rw-p 00000000 00:00 0 [heap]
b7600000-b7621000 rw-p 00000000 00:00 0
b7621000-b7700000 ---p 00000000 00:00 0
b77e2000-b77e3000 rw-p 00000000 00:00 0
bfc35000-bfc4a000 rw-p 00000000 00:00 0 [stack]
Aborted
如果你知道如何找出问题所在,或者至少向我解释一下记忆图的含义,那就太好了。 提前谢谢。
答案 0 :(得分:2)
内存映射告诉您进程崩溃。发生崩溃时,[Backtrace:]部分会告诉您堆栈返回跟踪(哪个函数称为哪个函数)。内存映射告诉您进程中的哪些地址有哪些数据。
与评论中建议的其他人一样,使用-g编译并在调试器(gdb)下运行程序以获得更好的信息。由于崩溃是由堆损坏引起的,因此使用valgrind工具会有所帮助,因为它专门处理这类问题。