Мы пытались найти некоторые проблемы с повреждением кучи в наших многопоточных приложениях C ++. В качестве одной из техник мы попытались добавить -lmcheck в строку библиотеки приложения. Это приводит к аварийному завершению работы приложения с явным повреждением кучи в относительно короткие сроки.
Наше приложение использует как malloc / free, так и new / delete (в зависимости от ситуации).
Один из наших сотрудников поинтересовался, является ли -lmcheck действительно потокобезопасным, и установил мьютекс вокруг всех вызовов malloc / free. Аварии исчезли.
Кто-нибудь знает, если -lmcheck должен поддерживать многопоточность? Интересно, неправильно ли мы понимаем инструмент, который пытаемся использовать, и тем самым вызываем у нас ненужное беспокойство?