Debugging malloc():新的内存损坏

问题描述 投票:0回答:1

我有一个将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():内存损坏”错误相关的其他堆栈溢出结果是由于访问未分配的内存而引起的,但是这里不是这种情况,因为分配调用本身引发了错误。

c++ memory-management
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.