Что это значит, когда malloc () или free () выдает ошибку сегментации? - PullRequest
2 голосов
/ 17 октября 2011

В настоящее время я использую dlmalloc(), чтобы увидеть, насколько она быстрее, чем оригинальная libc malloc().

Однако, выполнение free() продолжает вызывать ошибку сегментации ...

Кто-нибудь знает логические причины, по которым это может продолжаться?

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Segfault внутри функций управления памятью почти всегда указывает на то, что вы сделали что-то не так (например, перезаписали память за допустимые пределы) перед вызовом, который фактически вызывает segfaults.

Запуск вашего кода под Valgrind может помочь вам определить реальный источник проблемы.

1 голос
/ 17 октября 2011

Я бы сначала посмотрел на проблемы с повреждением памяти.Например, если вы выделите N байтов, а затем запишете в N+100 из них, вы, скорее всего, повредите область памяти.

Это потому, что многие реализации сохраняют свою служебную информацию (размеры блоков, списокуказатели и т. д.) в строке (между фактическими областями данных).

Другой возможностью будет двойное освобождение блоков, что может вызвать проблемы, если с тех пор эта память использовалась для какого-то другого выделения (особенно если ваш адрестеперь находится в середине области данных, а не в начале).

Прежде всего, убедитесь, что вы следуете правилам.Все остальное - неопределенное поведение, и все ставки отключены.

Вы также можете опубликовать исходный код проблемы, с которой вы столкнулись, чтобы мы могли ее изучить.Если вы сделаете это, постарайтесь свести его к наименьшему примеру, демонстрирующему проблему.Только самые выделенные SOer (a) захотят просмотреть бегемота на 10000 строк, чтобы найти вашу проблему.


(а) И я, конечно, не настолько предан: -)

...