Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 06.03.2015
Сообщений: 87

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

29.08.2018, 21:52. Показов 9996. Ответов 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
370 / 226 / 53
Регистрация: 18.10.2017
Сообщений: 2,418
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
370 / 226 / 53
Регистрация: 18.10.2017
Сообщений: 2,418
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
Ответ Создать тему
Новые блоги и статьи
Теория всего 6. Судьба неотвратима?
anaschu 21.07.2026
Математическое доказательство Судьбы: Точка бифуркации в едином тензорном ядре Модели ВсегоСвежее обновление питоновского ядра «Soil Chemistry 2. 0» дало нам неопровержимое математическое. . .
Теория всего 5. ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
anaschu 21.07.2026
Единое ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли Главная задача «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы» (аттракторов. . .
сукцессия 37. Внедрил дипсик в свой оркестр из ИИ. У него закончилось пространство чата, потому опубликую выводы из его работы здесь
anaschu 21.07.2026
==================================================================== КОНТЕКСТ: Моделирование микоризной сукцессии (AM → ECM) ==================================================================== . . .
сукцессия 36. Делаю прогоны модели около порога бифуркации (превращения эндо микоризы в экто микоризу)
anaschu 21.07.2026
СУКЦЕССИЯ МИКОРИЗ: КАК МАТЕМАТИКА ОБЪЯСНЯЕТ ПОДЗЕМНУЮ ВОЙНУ Мы привыкли думать, что лес — это деревья. А грибы — это то, что мы собираем в корзинку осенью. Но если заглянуть под землю, окажется,. . .
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru