Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Утечка памяти |
Автор: NightGoblin 2.1.2004, 05:52 |
Всем привет. Заранее прошу прощения, если вопрос из разряда RTFM&FAQ, но первого под рукой нет, а во втором ничего даже отдаленно напоминающего не нашлось. Значит так. Написал на C (без плюсов) кое-какую библиотеку. И теперь охота проверить, нет ли при работе с ней утечек памяти. Вопрос: как это сделать стандартными средствами? Я пробовал через sbrk(), но он выводит разные результаты даже если все было аккуратно удалено, то есть, при любом раскладе после работы с malloc()/free() размер сегмента меняется. Какие есть средства для проверки подобных вещей, желательно по стандарту ANSI и/или POSIX? Спасибо. |
Автор: <Spawn> 2.1.2004, 06:29 |
Поищи BoundsChecker. Сам не пробовал его, но читал, что это одна из лучших прог для проверки утечек памяти. |
Автор: Waters 2.1.2004, 19:58 |
http://www.rsdn.ru/article/vcpp/leaks.xml wbr. |
Автор: NightGoblin 2.1.2004, 21:36 |
<Spawn>, Waters, Большое спасибо, но это, к сожалению, не то, что нужно. Разработка ведется в UNIX (компилятор GCC) на чистом C, без классов. Есть ли какие-то стандартные средства (или, если есть, библиотека, которая будет работать и в *NIX) для контроля таких вещей? |
Автор: DENNN 5.1.2004, 10:23 |
Я бы еще попробовал поискать на sourceforge.net |
Автор: Kefir 5.1.2004, 19:36 |
Сам не пользовался, но вроде в RedHat есть что-то навроде Memory Profiler... |
Автор: Unregistered 6.1.2004, 14:05 |
Разные есть средства : mtrace, библиотека ccmalloc, библиотека Electric Fence. Все они есть в стандартной поставке. |
Автор: mr.DUDA 6.1.2004, 16:05 | ||
В крайнем случае, имхо можно взять да и написать самостоятельно парочку макросов, типа:
или же переопределить new_handler. ЗЫ, в статье с RSDN.ru как раз описывается такой подход, но с упором на компиляторы под Win-платформу. |
Автор: Unregistered 6.1.2004, 20:55 | ||||
Утилита mtrace позволяет выявить наиболее распространенную ошибку при работе с динамической памятью: несоответствие числа операций выделения и освобождения памяти. Алгоритм применения утилиты таков: 1. Включить в программу файл <mcheck.h>. Эта функция активизирует трассировку операций выделения и освобождения памяти. 2. Задать имя файла, в котором будет сохраняться трассировачная информация. Это делается следующим образом :
3. Запустить программу. 4. Вызвать mtrace:
|
Автор: NightGoblin 10.1.2004, 06:26 |
Всем огромное спасибо. Думаю, вариант с mtrace или переопределением имен подойдет больше всего. |