Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хочу отлавливать утечки памяти, но не хочу постоянно где-то что-то объявлять / 5 сообщений из 5, страница 1 из 1
14.04.2017, 18:16
    #39438927
cpp17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу отлавливать утечки памяти, но не хочу постоянно где-то что-то объявлять
Посмотрел на Visual Leak Detector, утечки памяти обнаруживает, но не показывает модуль и номер строки. Так что он для меня бесполезен. Возможно это связано с тем, что у меня MSVS 2017, которую он не поддерживает.

Нашёл такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
// где-то в начале программы объявляем:
#define new new( _NORMAL_BLOCK, __FILE__, __LINE__)
..............
// где-то в конце программы вызываем
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);



Этот вариант работает отлично, всё, что мне надо показывает.
Но. А вдруг это статическая библиотека, состоящая из множества модулей? Придётся везде и всюду вставлять этот код. Да и у библиотеки нет понятия начала и конца, неизвестно какой модуль понадобится в том или ином проекте.

Поэтому хочу сделать что-то универсальное, чтобы один раз объявить и чтобы работало всегда и везде не зависимо от различных линковок и вариантов использования. Т.е. надо, чтобы при запуске любого приложения гарантированно выполнилось:
#define new new( _NORMAL_BLOCK, __FILE__, __LINE__)

а при завершении - _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

Возможно ли такое ? Может класс какой создать, и в конструкторе и деструкторе это вызывать. Но чтобы экземпляр класса всегда сам создавался при запуске и всегда сам уничтожался в самом конце и самым последним.
Или ещё как-то ?
...
Рейтинг: 0 / 0
14.04.2017, 18:32
    #39438934
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу отлавливать утечки памяти, но не хочу постоянно где-то что-то объявлять
drMemory ты уже пробовал?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.04.2017, 18:54
    #39438940
cpp17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу отлавливать утечки памяти, но не хочу постоянно где-то что-то объявлять
Dimitry SibiryakovdrMemory ты уже пробовал?

Не пробовал, но почитал. Там умереть можно. Что-то надо специально устанавливать. Каждый проект надо специально настраивать. Запускать какое-то внешнее приложение, с определёнными параметрами, которое будет куда-то что-то писать в какие-то файлы, потом эти файлы где-то в каталогах искать и разбирать их.

Мне же надо просто, чтобы при разработке и отладке вышел warning, если где-то что-то забыл, а если не вышел, то считаем что всё хорошо и идём дальше.

Хотя не спорю, что для какого-то чужого и большого проекта, в котором надо найти утечки памяти, и которые явно есть, то drMemory может быть и хорошая штука.
...
Рейтинг: 0 / 0
14.04.2017, 20:04
    #39438977
cpp17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу отлавливать утечки памяти, но не хочу постоянно где-то что-то объявлять
Пока сделал так.
Создал модуль:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#ifdef _DEBUG
#if !defined( LD_H ) 
#define LD_H  
#define new new( _NORMAL_BLOCK, __FILE__, __LINE__)

#include <crtdbg.h>

class LD
{
public:
	LD()
	{
		_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
	}
};

__declspec(selectany) LD _ld_;

#endif
#endif



и подключаю его
...
Рейтинг: 0 / 0
20.04.2017, 09:59
    #39441388
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу отлавливать утечки памяти, но не хочу постоянно где-то что-то объявлять
cpp17Пока сделал так.
и подключаю его

А в каком месте подключаешь?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хочу отлавливать утечки памяти, но не хочу постоянно где-то что-то объявлять / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]