![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: нет Всего: 11 |
Всем привет.
Заранее прошу прощения, если вопрос из разряда RTFM&FAQ, но первого под рукой нет, а во втором ничего даже отдаленно напоминающего не нашлось. Значит так. Написал на C (без плюсов) кое-какую библиотеку. И теперь охота проверить, нет ли при работе с ней утечек памяти. Вопрос: как это сделать стандартными средствами? Я пробовал через sbrk(), но он выводит разные результаты даже если все было аккуратно удалено, то есть, при любом раскладе после работы с malloc()/free() размер сегмента меняется. Какие есть средства для проверки подобных вещей, желательно по стандарту ANSI и/или POSIX? Спасибо. -------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
Поищи BoundsChecker. Сам не пробовал его, но читал, что это одна из лучших прог для проверки утечек памяти.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Waters |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.11.2003 Репутация: нет Всего: нет |
||||
|
||||
NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: нет Всего: 11 |
<Spawn>, Waters,
Большое спасибо, но это, к сожалению, не то, что нужно. Разработка ведется в UNIX (компилятор GCC) на чистом C, без классов. Есть ли какие-то стандартные средства (или, если есть, библиотека, которая будет работать и в *NIX) для контроля таких вещей? -------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Я бы еще попробовал поискать на sourceforge.net
|
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
Сам не пользовался, но вроде в RedHat есть что-то навроде Memory Profiler...
|
|||
|
||||
Unregistered |
|
|||
Unregistered |
Разные есть средства : mtrace, библиотека ccmalloc, библиотека Electric Fence. Все они есть в стандартной поставке.
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
В крайнем случае, имхо можно взять да и написать самостоятельно парочку макросов, типа:
или же переопределить new_handler. ЗЫ, в статье с RSDN.ru как раз описывается такой подход, но с упором на компиляторы под Win-платформу. Это сообщение отредактировал(а) mr.DUDA - 6.1.2004, 16:09 -------------------- ![]() |
|||
|
||||
Unregistered |
|
||||
Unregistered |
Утилита mtrace позволяет выявить наиболее распространенную ошибку при работе с динамической памятью: несоответствие числа операций выделения и освобождения памяти. Алгоритм применения утилиты таков:
1. Включить в программу файл <mcheck.h>. Эта функция активизирует трассировку операций выделения и освобождения памяти. 2. Задать имя файла, в котором будет сохраняться трассировачная информация. Это делается следующим образом :
3. Запустить программу. 4. Вызвать mtrace:
|
||||
|
|||||
NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: нет Всего: 11 |
Всем огромное спасибо. Думаю, вариант с mtrace или переопределением имен подойдет больше всего.
-------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |