我在运行时遇到以下错误。它是什么意思,我该如何调试它?

时间:2013-12-24 12:06:25

标签: c++ debugging runtime-error

*** glibc detected *** ./main: corrupted double-linked list: 0x086c4f30 ***

此后程序没有退出,我被迫退出使用cntrl + C.我没有在我的整个代码中使用像“删除”这样的任何内存分配

在使用Valgrind时,我收到以下消息:

Invalid write of size 4
==20358==    at 0x8049932: main (main.cpp:123)
==20358==  Address 0x432e6f8 is 0 bytes after a block of size 16 alloc'd
==20358==    at 0x402C454: operator new[](unsigned int) (in        /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==20358==    by 0x8049907: main (main.cpp:120)

第123行的相应代码是

float **der_global= new float *[NODES];
for(int i=0; i<no_element; i++)
{
der_global[i]=new float [no_element];
}

2 个答案:

答案 0 :(得分:0)

当程序释放不再有效的内存时,通常会显示此错误。 您使用的是malloc还是其他任何动态分配。

如果您可以添加一些代码

,那么很容易解决您的问题

尝试使用valgrind

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

并查看val.log

你也可以使用gdb,但为此你需要使用-g标签进行编译

答案 1 :(得分:0)

您的原始新通话为您提供存储NODES指针的空间;但是你的for循环尝试设置它们的no_element,它们不必是相同的数字。你的for循环应该少于NODES,而不是no_element。