尽管系统具有大量可用内存,但在执行malloc时在RHEL 5.x中崩溃

时间:2018-05-07 18:24:29

标签: malloc fopen glibc libc rhel5

我有一个应用程序在过去15天运行良好,下面的函数被多次调用,但它今天在fopen中崩溃了。我已经粘贴了下面的bt,有人可以建议可能发生的错误,从回溯看起来它似乎不是内存损坏,因为所有线程数据和堆栈变量看起来都很好。它可能与RHEL 5.x中的某些错误有关吗

>>(gdb) bt
>>#0  0x00fe4410 in __kernel_vsyscall ()
>>#1  0x0057ab10 in raise () from /lib/libc.so.6
>>#2  0x0057c421 in abort () from /lib/libc.so.6
>>#3  0x005b367b in __libc_message () from /lib/libc.so.6
>>#4  0x005bc8bd in _int_malloc () from /lib/libc.so.6
>>#5  0x005be247 in malloc () from /lib/libc.so.6
>>#6  0x005aa8ef in __fopen_internal () from /lib/libc.so.6
>>#7  0x005aa9bc in fopen@@GLIBC_2.1 () from /lib/libc.so.6
>>#8  0x0811cbff in file_timer_expiry (p_mod_ctx=0xb07e4c8, p_timer_ctx=0x7ce78368) 
>>#9  0x08117c33 in timer_handler (timerId=0xad54aa50, p_timer_info=0x7ce78368, p_module_context=0xb07e4c8)
>>#10 0x08397b43 in ProcessTimerTable (vc=0xae6edb8, nw=0xa89fd380)
>>#11 0x0839974c in Schedule (nw=0xa89fd380, f=0x832027e <BaseUpdate>, ctxt=0x9955e98)
>>#12 0x080730a1 in DriverWhile (p_info=0x95f68c8, W=0x84a698c, policy=2 '\002')
>>#13 0x080732e1 in start_id (args=0x95f68c8)
>>#14 0x006e7912 in start_thread () from /lib/libpthread.so.0
>>#15 0x0062747e in clone () from /lib/libc.so.6
>>#16 0x00000000 in ?? ()

1 个答案:

答案 0 :(得分:0)

malloc实施中的崩溃(在99.99%的情况下)是堆损坏的结果。

您的程序可能打印了一条消息,类似于

glibc detected ./a.out: double free or corruption (!prev): 0x0000000000c6ed50

到它运行的终端。

要查找堆损坏,请使用Valgrind或(更好)Address Sanitizer(最近版本的GCC和Clang支持)。