我有一个将Fortran和C ++结合在一起的中小型应用程序。主要模块是用Fortran编写的,但是一个模块是用c ++编写的。该模块返回指向以Fortran大小存储的类对象的指针。在这些指针之一上创建期间,系统抛出以下错误:
malloc(): memory corruption
Thread 1 "bc_test" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory
(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007ffff4a60801 in __GI_abort () at abort.c:79
#2 0x00007ffff4aa9897 in __libc_message (action=action@entry=do_abort,
fmt=fmt@entry=0x7ffff4bd6b9a "%s\n") at ../sysdeps/posix/libc_fatal.c:181
#3 0x00007ffff4ab090a in malloc_printerr (
str=str@entry=0x7ffff4bd4e0e "malloc(): memory corruption") at malloc.c:5350
#4 0x00007ffff4ab4994 in _int_malloc (av=av@entry=0x7ffff4e0bc40 <main_arena>,
bytes=bytes@entry=44) at malloc.c:3738
#5 0x00007ffff4ab72ed in __GI___libc_malloc (bytes=44) at malloc.c:3065
#6 0x00007ffff50bc298 in operator new(unsigned long) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x0000555555578967 in My_Class::My_Class(this=0x7fffffffd4e0, n=11)
at /home/.../my_class.cpp:20
使用gdb,我发现在调用new的过程中抛出了错误。更具体地说,在通过new创建的对象的构造函数中对new的调用期间(基本的new调用按预期方式工作)。引发错误的行如下:
int* test = new int[n];
在这种情况下,n是n = 11的整数。
我不认为问题是由于内存不足,因为此时我只分配了2个小类实例和一些基本变量。我也相信,如果这是问题的话,这将引发另一个错误。
[遗憾的是,我还没有创建MWE。我现在已经没有关于如何解决此问题的想法。什么会导致此错误?除了找到抛出错误的行之外,如何调试它?
与“ malloc():内存损坏”错误相关的其他堆栈溢出结果是由于访问未分配的内存而引起的,但是这里不是这种情况,因为分配调用本身引发了错误。