сбой fopen в RHEL 5.x при выполнении malloc, хотя система имеет много доступной памяти - PullRequest
0 голосов
/ 07 мая 2018

У меня есть приложение, которое работало нормально в течение последних 15 дней, и нижеприведенные функции вызывались несколько раз, но сегодня он зависал в fopen. Я вставил bt ниже, может кто-нибудь посоветует, что могло произойти неправильно, из backtrace это, похоже, не повреждает память, так как все данные потоков и переменные стека выглядят хорошо. Может ли это быть связано с какой-то ошибкой в ​​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 голосов
/ 15 мая 2018

Сбой в реализации malloc является (в 99,99% случаев) результатом повреждения кучи.

Вероятно, ваша программа напечатала сообщение, похожее на

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

к терминалу, на котором он работал.

Чтобы найти повреждение кучи, используйте Valgrind или (лучше) Address Sanitizer (поддерживается последними версиями GCC и Clang).

...