Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: timocov от Октябрь 06, 2013, 21:54



Название: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 06, 2013, 21:54
Доброго времени суток!
Столкнулся с такой проблемой:
Запускаю приложение, отрабатывает как нужно, но после закрытия выскакивает окно с ошибкой(в прикр. файле)

Уже несколько дней бьюсь, не могу понять почему. Примерно знаю после чего такая ерунда, но как исправить не знаю.
Помогите, кто может.
В прикрепленном файле проект, Qt4


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: kambala от Октябрь 06, 2013, 22:44
наверное где-то удаляешь уже удаленный указатель, проверь свои free/delete


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 06, 2013, 22:56
Так в том то и дело, что ничего не удаляю, практически.


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: kambala от Октябрь 06, 2013, 23:13
компилятор от visual studio 2012, никаких ошибок не вываливается при завершении. но при запуске под дебаггером вылазит 2 предупреждения (это наверное какие-то системные):
Цитировать
:0: warning: Exception at 0x7510c41f, code: 0x6ba: RPC server unavailable, flags=0x1 (execution cannot be continued) (first chance)
когда открывается окно выбора папки и
Цитировать
:0: warning: Exception at 0x7510c41f, code: 0x406d1388: Startup complete, flags=0x0 (first chance)
где-то в процессе прохода по папкам.

попробуй может очистить полностью проект и поудалять все build-папки.


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 06, 2013, 23:23
Очищал, удалял. Под убунтой тоже ложится.
У меня она отваливается когда сканирую весь диск C. Очень много файлов, видимо. Но только на нем ложится.

Даже не только целый диск. Например, папку c:\Windows


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: kambala от Октябрь 06, 2013, 23:34
У меня она отваливается когда сканирую весь диск C. Очень много файлов, видимо. Но только на нем ложится.

Даже не только целый диск. Например, папку c:\Windows
с этого и надо было начать. так у меня тоже вываливается ошибка. вот стек на всякий случай:


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 06, 2013, 23:49
Думал проблема в QReadWriteLock, заменил на QMutex. Не помогло(

Что можете посоветовать? Или тут проблема очевидна?

Update:
Думал, может ошибка в том, что InfoCollectThread наследуется от QObject.
Переписал все на обработку событий вместо сигналов/слотов - эффекта нет(


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 07, 2013, 03:30
Метод тыка показал, что проблема в удалении объектов DirectoryTreeItem.
Только вот если не удалять, утечка будет((


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: Bepec от Октябрь 07, 2013, 06:51
Может вы сначала удаляете родителя, а потом пытаетесь детей? Родитель сам беспокоится о детях.


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 07, 2013, 10:57
Я вообще не удаляю - предоставляю это QTreeWidget


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 07, 2013, 12:05
А что, если объекты DirectoryTreeItem создаются в других потоках, а удаляются в главном?


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: lit-uriy от Октябрь 07, 2013, 19:29
GUI-компоненты не могут существовать в других потоках кроме основного (это есть в документации по Qt)


Название: Re: Ошибка: Debug Assertion Failed(нарушение дебаженой кучи)
Отправлено: timocov от Октябрь 08, 2013, 00:34
В общем. Не знаю что точно помогло. Но сделал DirectoryTreeItem наследником от QObject(ну и удалять стал QObject::deleteLater()), и добавил отдельный класс для отображения на экране, и вроде работает.
Всем спасибо, кто помогал.