*** 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];
}
答案 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。