Вы должны знать C, чтобы иметь возможность называть себя программистом!
Хотя вы упомянули, что это нежелательно, для обнаружения утечек памяти можно использовать Сборщик мусора Боэма . Проще говоря, если сборщик мусора когда-либо действительно запущен, то обычно возникает утечка памяти. Таким образом Mozilla обнаруживает утечки памяти в Firefox.
Валгринд - ваш лучший друг . Valgrind имеет плагин для eclipse. «К сожалению» Valgrind не работает в Windows, но он работает в Mac OSX, * BSD и Linux, так что я бы назвал это «мультиплатформенным». :)
Valgrind "перезаписывает" new / delete / malloc / free, но не во время компиляции (так что вам не нужно перекомпилировать, если вы это имеете в виду). Он интерпретирует двоичный файл, поэтому во время тестирования производительность немного страдает.
для 32-битных приложений valgrind + wine также может быть рабочим решением для приложений Windows. Если ваше приложение можно запускать под вином без каких-либо изменений, то запуск под valgrind + wine хорошо работает в моем (довольно ограниченном) опыте. Поскольку ваше приложение работает под Linux, я предполагаю, что ваше приложение, скорее всего, будет работать под вином (избегая очень специфичного для Windows кода, который еще не поддерживается в Wine).
В MacOS X есть инструмент leaks
(я не знаю, существует ли он где-либо еще), и я использовал инструмент под названием memprof в Linux. Также есть valgrind, который работает в Linux и невероятно крутой, но имеет существенное снижение производительности, и якобы на macos, но я не пробовал его.
Однако мне неизвестны такие инструменты в Windows.
DUMA - это кроссплатформенная библиотека обнаружения утечек, которую я использую во многих своих проектах. Это приятно, потому что вам не нужно #include
какой-либо заголовок, специфичный для DUMA, а просто выполнить компоновку в библиотеке перед компоновкой в libc вашей системы, которая содержит процедуры распределения памяти, и после компоновки в libstdc ++.
Это может быть довольно сложно настроить, особенно при использовании с проектами C ++, но я думаю, что это стоит потраченного времени. Это помогло мне найти несколько утечек памяти, которые я мог бы не обнаружить в противном случае, и один случай, когда я дважды удалил выделение.
Одно замечание: гораздо проще создать статический архив (созданный по умолчанию в Windows), потому что он помогает уменьшить количество «ложных срабатываний», которые на самом деле вызваны утечкой времени выполнения.