Суббота, 23 Ноября 2024, 00:45

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Запарили утечки памяти
ЧерешняДата: Понедельник, 08 Марта 2010, 18:38 | Сообщение # 1
был не раз
Сейчас нет на сайте
С этими утечками памяти в C++ просто беда. Посоветуйте, что можно сделать? Может быть есть какие-то специальные утилиты?
ApatiДата: Понедельник, 08 Марта 2010, 19:45 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Можно организовать счетчик для слежения за памятью.

Code
//примерно такой интерфейс класса:
class Link_Telltale
{
       void add(void*, const char*);
       void del(void*);
       int link_count();
       const char* get_link_name(int);
};

Link_Telltale link_telltale;

//далее в коде после каждого выделения и удаления памяти:
v1=new type;
link_telltale.add(v1,"для переменной v1");
v2=new type;
link_telltale.add(v2,"для переменной v2");
delete v1;
link_telltale.del(v1);

//ну и в самом конце смотрим какие переменные не были освобождены:
for (int i=0; i<link_telltale.link_count(), i++) cout << link_telltale.get_link_name(i);
//должно вывести "для переменной v2".


Сообщение отредактировал Apati - Понедельник, 08 Марта 2010, 19:50
PesetsДата: Вторник, 09 Марта 2010, 16:07 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
В MS VC++ можно так сделать:
Code
(ПОСЛЕ всех инклюдов)
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
(в конце программы - перед return в функции main)
_CrtDumpMemoryLeaks();

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

Если под линукс, то там есть замечательная прога Valgrind. Юзается примерно так:

Code
<путь>/valgrind --tool=memcheck --leak-check=yes --show-reachable=yes
./<имя исполняемого файло>

А вообще, руки надо прямые иметь :P





Сообщение отредактировал Pesets - Вторник, 09 Марта 2010, 16:08
ЧерешняДата: Воскресенье, 14 Марта 2010, 17:29 | Сообщение # 4
был не раз
Сейчас нет на сайте
Ура! Я нашел для себя отличное решение - Deleaker. Мне оч понравилось.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг