如何纠正*** glibc在程序中检测到***错误

可能重复:
glibc检测到错误

嗨,当我在开关盒中按下一个选项时收到此错误时,我正在GNU C ++中执行我的项目。 由于程序的其余部分正在执行,我留下了这个错误。 我不知道它是什么以及它为什么会发生。 请解释并指导我在哪里开始查看我的程序。

错误详情:

*** glibc detected *** ./test.out: free(): invalid pointer: 0xbfb1c874 *** ======= Backtrace: ========= /lib/libc.so.6[0x55c0f1] /lib/libc.so.6(cfree+0x90)[0x55fbc0] ./test.out[0x809f855] ./test.out[0x804fbc0] ./test.out[0x804f9bb] ./test.out[0x80502bb] ./test.out[0x805084e] ./test.out[0x8050d07] /lib/libc.so.6(__libc_start_main+0xdc)[0x508e8c] ./test.out[0x8049981] ======= Memory map: ======== 004f3000-00631000 r-xp 00000000 08:01 6148422 /lib/libc-2.5.so 00631000-00633000 r-xp 0013e000 08:01 6148422 /lib/libc-2.5.so 00633000-00634000 rwxp 00140000 08:01 6148422 /lib/libc-2.5.so 00634000-00637000 rwxp 00634000 00:00 0 0078d000-007a7000 r-xp 00000000 08:01 6152013 /lib/ld-2.5.so 007a7000-007a8000 r-xp 00019000 08:01 6152013 /lib/ld-2.5.so 007a8000-007a9000 rwxp 0001a000 08:01 6152013 /lib/ld-2.5.so 007f9000-0081e000 r-xp 00000000 08:01 6148435 /lib/libm-2.5.so 0081e000-0081f000 r-xp 00024000 08:01 6148435 /lib/libm-2.5.so 0081f000-00820000 rwxp 00025000 08:01 6148435 /lib/libm-2.5.so 00b18000-00b23000 r-xp 00000000 08:01 6148439 /lib/libgcc_s-4.1.2-20080825.so.1 00b23000-00b24000 rwxp 0000a000 08:01 6148439 /lib/libgcc_s-4.1.2-20080825.so.1 08048000-080c6000 r-xp 00000000 00:1e 736543 /users/guest10/shashi/Demo/src/test.out 080c6000-080c7000 rwxp 0007e000 00:1e 736543 /users/guest10/shashi/Demo/src/test.out 080c7000-080cc000 rwxp 080c7000 00:00 0 08d05000-218b1000 rwxp 08d05000 00:00 0 [heap] b7e00000-b7e21000 rwxp b7e00000 00:00 0 b7e21000-b7f00000 ---p b7e21000 00:00 0 b7fab000-b7fac000 rwxp b7fab000 00:00 0 b7fc4000-b7fc7000 rwxp b7fc4000 00:00 0 b7fc7000-b7fc8000 r-xp b7fc7000 00:00 0 [vdso] bfb0b000-bfb21000 rw-p bffe9000 00:00 0 [stack] Abort 

请帮助..感谢Adv

只有在向我们展示代码时才能提供确切的解决方案。 但错误很明显。 代码释放不存在或不再有效的内存。 这意味着地址是错误的,因为例如在原始指针上完成指针运算。 或者指针已被释放(双重释放)。

您最有可能尝试free未动态分配的内存。 也许你有一个不必要的free或错字: free(&buf)而不是free(buf)

使用-g标志编译程序并通过调试器或内存调试器运行它。 这将显示错误发生的位置。

看起来你正试图free invalid pointer 。 您可以使用像[Valgrind][1]这样的内存检查程序来运行程序:

 valgrind --tool=memcheck --leak-check=full --track-origins=yes --show-reachable=yes --log-file=val.log ./  

查看val.log ,您应该能够找出内存泄漏的位置。 此外,您可以尝试使用gdb/ddd (debuggers)逐步执行代码。 程序将在发生segmentation fault的位置失败。 要使代码debuggable ,您需要使用-g标志重新编译代码。

或者,您可以在此处发布您的代码,让社区查看您出错的地方。