1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 87

Утечки памяти в qt приложения как отловить

29.08.2018, 21:52. Показов 10042. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую в программе большой размерности матрицы. Делаю их динамически так
C++
1
2
3
4
5
quint8 ** Table1;
for(int i=0;i<10000;i++)
{
    Table1[i] = new quint8 [50];
}
Потом делаю расчеты с участием этой матрицы и так много раз в цикле. На каждой итерации цикла заполняю эту матрицу байтами из файла. Проблема в том, что в конечном итоге после около 3000 итераций цикла прога падает, по стеку ясно, что внутри системного вызова malloc падает, то есть из-за больших матриц память начинает так лагать.

Если я в конце итерации цикла удаляю эту матрицу так
C++
1
2
3
4
5
for(int i=0;i<10000;i++)
        {
            delete Table1[i];;
        }
delete[] Table1;
То баг исчезает с выделением памяти. Вот почему подобное случается, когда я эту матрицу не удаляю из памяти после использования. И как лучше сделать, чтобы qt сама занималась удалением ненужных матриц.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2018, 21:52
Ответы с готовыми решениями:

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

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

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

30
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.08.2018, 21:23
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от roman912 Посмотреть сообщение
так вот при обращении за пределы массива, at функция падает с исключением, но прога не тормозится на строчке
Настроить отладчик, чтобы он останавливался на любых необработанных исключениях.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2018, 21:31
Цитата Сообщение от oxotnik Посмотреть сообщение
Вся? в х64 системе?
Вопрос оперативки. И памяти выделяемой ОС под процесс.
0
 Аватар для peter_irich
371 / 227 / 53
Регистрация: 18.10.2017
Сообщений: 2,430
30.08.2018, 21:48
0x90h, не помню, чтобы у меня случались неприятности из-за malloc/free. Она отводит память
одним куском, какие тут неприятности? Хотя на C++ я действительно предпочитаю отводить память одним
куском с помощью new. Но и malloc ошибки не вызовет, пусть с new и правильнее.
0
693 / 465 / 162
Регистрация: 01.10.2015
Сообщений: 1,274
30.08.2018, 21:56
Цитата Сообщение от peter_irich Посмотреть сообщение
Она отводит память одним куском, какие тут неприятности?
malloc() может вернуть при неудаче в качестве указателя NULL, разыменование которого есть UB, придется код увешивать проверками, которые не факт, что спасут. А память "одним куском" вам могут и не дать (по тем или иным причинам). Плюсы позволяют вам стрелять себе в ногу из орудия любого калибра, какое только вы сможете достать, поэтому выгода не столь глобальна, а потенциально проблем может и добавиться.
0
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 87
30.08.2018, 22:22  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
Настроить отладчик, чтобы он останавливался на любых необработанных исключениях.
А подскажи как это сделать в qt отладчике ?
0
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
30.08.2018, 22:31
oxotnik, тут уже вопрос вероисповедания подхода к Qt. Для одних он сегодня существует, а завтра - нет, а код поддерживать нужно, а для других это мощный инструмент, который может всё
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
30.08.2018, 22:49
Цитата Сообщение от 0x90h Посмотреть сообщение
придется код увешивать проверками
Вы еще этого не делаете? Тогда баги идут к вам.

Добавлено через 3 минуты
Цитата Сообщение от mvngr Посмотреть сообщение
Для одних он сегодня существует, а завтра - нет, а код поддерживать нужно
Скачанные сегодня исходники Qt никуда не денутся и через 10-20 лет. Если остро стоит вопрос о поддержке написанного кода, никто не мешает через означенный промежуток времени достать их из загашника и допилить до нужного состояния.
Единственную проблему тут вижу, что винда в нынешнем состоянии через это время перестанет существовать и текущие версии будут недоступны.
0
 Аватар для peter_irich
371 / 227 / 53
Регистрация: 18.10.2017
Сообщений: 2,430
30.08.2018, 23:26
0x90h, делать проверку, что возвращён не NULL, надо обязательно, это не обуза, а обязанность.
Могут и не дать память одним куском, но мне об этом думать не требуется, а вот 10000 вызвать new для простой
переменной - тут надо было подумать, прежде чем делать такое. Я, кстати, сейчас не знаю, что реально отводит
оператор new и следит ли система за тем, сколько и где отведено. Вдруг он отводит не меньше чем страницу за раз?
Да, на C++ лучше пользоваться оператором new.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.08.2018, 23:53
Цитата Сообщение от roman912 Посмотреть сообщение
А подскажи как это сделать в qt отладчике ?
Если дебаггер GDB (из MinGW) должно получиться без доп.настроек:
Миниатюры
Утечки памяти в qt приложения как отловить  
0
34 / 36 / 17
Регистрация: 16.04.2017
Сообщений: 478
Записей в блоге: 4
31.08.2018, 11:56
Цитата Сообщение от oxotnik Посмотреть сообщение
А так же, судя по тестам, они работают чуть быстрее stl (мапы и хэши 20-30% по скорости выигрывают)
Можно ссылку, а то я нашёл только,что qhash ~+5% -считай погрешность, мапы немного медленнее.

Цитата Сообщение от oxotnik Посмотреть сообщение
с последним я весьма плотно столкнулся не так давно
можно поподробнее-что было?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
31.08.2018, 14:09
saqef, скорость я сам замерял, там был хитрый тестовый проект с многоуровневой индексацией, вставками, удалениями и прочими тяжелыми операциями.
Насчёт фрагментации, можно погенерить в куче какие либо объекты с помещением их в контейнеры и рандомным удалением их.
В моём случае это 50-100тыс объектов в секунду, в многопоточной режиме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2018, 14:09

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

Как избавиться от утечки памяти через 'string' в D5?
Всем доброго времени суток! Кто знает — есть ли какие нибудь средства принудительного освобождения памяти, занимаемой переменной...

Как отписаться от события чтобы не было утечки памяти
Здравствуйте, подскажите как отписаться от события чтобы не было утечки памяти. Все равно после отписки срабатывает события. ...

Как избежать утечки памяти: нюансы использования QList
class T { QList&lt;bitset&lt;32&gt; &gt; bits; QList&lt;bitset&lt;32&gt; &gt; newList() { return QList&lt;bitset&lt;32&gt; &gt;(); } void...

Как избавиться от утечки памяти при переключении между виджетами?
Задача: 1) Показать кнопку в Form1. 2) По нажатию на кнопку переключиться в такую же форму с кнопкой Form2. 3) Аналогично по нажатию...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru