Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344

Как правильно отследить утечки памяти в mfc приложении

19.03.2023, 23:09. Показов 2232. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую. Есть ли способ,как вывести,к примеру в messagebox,файлы и строки в них,где возникают утечки памяти. Я хочу чтобы,к примеру,в начале мы запустили процесс отслеживания,а в какой-либо строке кода вызвали функцию,получающую утечки памяти,и вывели в MessageBox в каких строках каких файлов они были обнаружины. Мне очень понравилась библиотека _CrtDumpMemoryLeaks,но она не умеет выводить текст в диалоговое окно. Подскажите пожалуйста,как можно отследить утечки памяти в mfc приложении (там есть как и c++ код,так и c код).
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2023, 23:09
Ответы с готовыми решениями:

Утечки памяти в приложении, связанные с ресурсами элементов
Я думаю не секрет, что часто бывают утечки памяти из-за того, что, например, в ресурсах кнопки, что-то задают, а потом инстанцируют данную...

Нахождение "утечки" памяти или как правильно почистить мусор
Добрый день Гуру. Win 8.1, DX 10.2 32 bit. Стандартный набор фраз: новичок, программирую вот уже 20 ... дней. Кусок кода вызывается...

подскажите пожалуйста, правильно ли сделанна конструкция, и не будет ли утечки памяти
vector<int*> mas; int* buf; for(int i=0;i<10;i++) { buf=new int; mas.push_back(buf); } delete buf; for(int...

4
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
20.03.2023, 07:28
КАВ, я вот так навскидку припоминаю только один случай, где можно поймать утечку в MFC - это когда работаешь с CDatabase, CRecord. Если они кидают исключение, то ловить его нужно не при помощи try/catch, а при помощи макросов TRY/CATCH/END_CATCH

C++
1
2
3
4
5
6
7
8
9
    TRY
    {
             ....
    }
    CATCH(CDBException, e)
    {
             ....
    }
    END_CATCH;
в остальных случаях обычно достаточно не использовать new/delete напрямую.

Расскажи, как ты используешь в проекте динамическую память? Когда именно появляется утечка, после каких действий
0
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,120
20.03.2023, 13:21
КАВ, у VisualStudio есть встроенные средства профилирования. В числе прочего есть возможность анализировать состояние кучи. Реализуется это с помощью снимков памяти. Сперва делаются два снимка, а потом смотрится разница между ними. Пример в виде последовательности снимков экрана и текстового пояснения к ним.

1.1 Запускаем отладку и останавливаемся в начале для создания первого снимка.
1.2 В средствах диагностики выбираем закладку "использование памяти".
1.3 Включаем профилирование кучи.
1.4 Делаем снимок

2.1 Выполняем программу до второй точки останова.
2.2 Делаем второй снимок
2.3 Активируем окно анализа

3.1 В режиме просмотра выбираем "представление стеков".
3.2 Разворачиваем/сворачиваем стеки вызовов с наибольшими цифрами и определяем место утечек
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
20.03.2023, 15:08  [ТС]
Я не знаю,есть ли у меня утечки,поэтому я хочу это проверить. Кстати интересно,будет ли утечка памяти в этом случае:

Добавлено через 15 минут
Я не знаю,есть ли у меня утечки памяти,поэтому я и хочу это узнать. Кстати раз речь зашла об причинах утечек,может ли быть утечка в этом случае?
C++
1
2
CString a=L"Тест";
a=L"";
Просто перед присваиванием нового значения,наверное,желательно написать a =NULL,или это не обязательно делать? Также мне непонятно,в каких случаях нужно использовать функцию free,а в каких - оператор delete. Нужно ли освобождать ресурсы после использования memset? Также у меня возникает вопрос,как правильно освобождать структуру. Ещё я читал,что после освобождения указателя его нужно присвоить NULL,не знаю,насколько это правда. Эти вопросы у меня возникают как по c,так и по c++. Очень жаль что библиотека CrtDumpMemoryLeaks не выводит информацию об утечках памяти в MessageBox. Так я мог бы в начале функции,инициализирующей ресурсы,начать отслеживание,а в конце функции,освобождающей ресурсы,вывести все утечки памяти.
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
20.03.2023, 17:42
Цитата Сообщение от КАВ Посмотреть сообщение
может ли быть утечка в этом случае?
C++Выделить код
1
2
CString a=L"Тест";
a=L"";
нет

Добавлено через 1 минуту
Цитата Сообщение от КАВ Посмотреть сообщение
Просто перед присваиванием нового значения,наверное,желательно написать a =NULL,или это не обязательно делать?
не просто необязательно, а вообще не нужно.

а ещё, в C++ забудь про NULL, тут - nullptr

Добавлено через 1 минуту
Цитата Сообщение от КАВ Посмотреть сообщение
в каких случаях нужно использовать функцию free,а в каких - оператор delete.
память, выделенная сишными malloc/calloc/realloc освобождается free

а в C++ используется new/delete, new[]/delete[]

Добавлено через 2 минуты
Цитата Сообщение от КАВ Посмотреть сообщение
Нужно ли освобождать ресурсы после использования memset
memset пишет в уже используемое процессом ОЗУ, ничего освобождать не надо

Цитата Сообщение от КАВ Посмотреть сообщение
Также у меня возникает вопрос,как правильно освобождать структуру
вопрос непонятен

Цитата Сообщение от КАВ Посмотреть сообщение
Ещё я читал,что после освобождения указателя его нужно присвоить NULL
если нужно пометить указатель "пустым", то его обнуляют (nullptr). В других случаях обнулять необязательно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2023, 17:42
Помогаю со студенческими работами здесь

Как избежать утечки памяти при данном выделении памяти?
Всем привет. В проекте MFC делаю следующие манипуляции MY_STRUCT *ms = new MY_STRUCT(); m_tree_control.SetItemData(hChild,...

А как вы находите утечки памяти?
Люди! А как вы находите утечки памяти в Buildere? AQtime я попробовал, поставил профиль там Alloccation, но он мне как Dr Memory Не указал...

Как проверить утечки памяти?
Люди добрые! Подайте пожалуйста неочень тяжелую (до 3 МВ) тулзу для проверки не теряет ли прога случаем память на крутых поворотах. А...

Утечки памяти в qt приложения как отловить
Использую в программе большой размерности матрицы. Делаю их динамически так quint8 ** Table1; for(int i=0;i<10000;i++) { ...

Ошибка: Утечки памяти Как исправить?
Вот задача: Составьте программу primediv.c, вычисляющую наибольший простой делитель некоторого числа x. Число x вводится со стандартного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 11.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 10.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 09.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 09.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 08.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 08.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru