Мое приложение segfaults иногда и главным образом в malloc () и malloc_consolidate (), когда я смотрю на след в gdb.
Я проверил, что машина имеет достаточно памяти в наличии, она даже не начинала подкачивать. Я проверил ulimits на данные segement и макс. емкость памяти, и оба установлены на 'неограниченный'. Я также запустил приложение под valgrind и не нашел ошибок памяти.
Теперь я вне идей, что еще могло бы вызывать эти segfaults. Какие-либо Идеи?
Обновление: Так как я ничего не нахожу с valgrind (или ptrcheck), могло случиться так, что другое приложение повреждает структуру памяти libc или является там отдельной структурой для каждого процесса?
Скорее всего, вы выбрасываете кучу мусора, т. Е. вы пишете за пределами выделенной вами памяти, и это перезаписывает структуры данных, которые malloc ()
использует для управления кучей. Это приводит к тому, что malloc ()
обращается к недопустимому адресу, и ваше приложение аварийно завершает работу.
Нехватка памяти не приведет к сбою malloc ()
- она просто вернет NULL
. Это может привести к сбою вашего кода, если вы не проверяете NULL
, но место сбоя не будет в malloc ()
.
Немного странно, что Valgrind не сообщает об ошибках, но есть некоторые ошибки, которые инструмент Memcheck по умолчанию может пропустить. Попробуйте вместо этого запустить Valgrid с помощью инструмента «Ptrcheck» .