Segfaults в malloc () и malloc_consolidate ()

Мое приложение segfaults иногда и главным образом в malloc () и malloc_consolidate (), когда я смотрю на след в gdb.

Я проверил, что машина имеет достаточно памяти в наличии, она даже не начинала подкачивать. Я проверил ulimits на данные segement и макс. емкость памяти, и оба установлены на 'неограниченный'. Я также запустил приложение под valgrind и не нашел ошибок памяти.

Теперь я вне идей, что еще могло бы вызывать эти segfaults. Какие-либо Идеи?

Обновление: Так как я ничего не нахожу с valgrind (или ptrcheck), могло случиться так, что другое приложение повреждает структуру памяти libc или является там отдельной структурой для каждого процесса?

27
задан Gene Vincent 23 June 2010 в 14:04
поделиться

1 ответ

Скорее всего, вы выбрасываете кучу мусора, т. Е. вы пишете за пределами выделенной вами памяти, и это перезаписывает структуры данных, которые malloc () использует для управления кучей. Это приводит к тому, что malloc () обращается к недопустимому адресу, и ваше приложение аварийно завершает работу.

Нехватка памяти не приведет к сбою malloc () - она ​​просто вернет NULL . Это может привести к сбою вашего кода, если вы не проверяете NULL , но место сбоя не будет в malloc () .

Немного странно, что Valgrind не сообщает об ошибках, но есть некоторые ошибки, которые инструмент Memcheck по умолчанию может пропустить. Попробуйте вместо этого запустить Valgrid с помощью инструмента «Ptrcheck» .

13
ответ дан 28 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: