Название: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 10:02 Доброго времени суток! как проверить код на утечки памяти? например я написал код в котором создаются некие объекты, указатели на которые я помещаю в QList Код: void Dialog::slNew() и очищаю лист как приведено в ассистенте: Код: void Dialog::slDel() пробовал смотреть в винде через диспетчер задач... при запуске приложения выделяется к примеру 3 Мб.. жму - создать объекты - становиться к примеру 18 Мб... жму очистить лист - становится 7Мб ... т.е получается, что память все больше и больше "кушается" ??? т.е есть утечка? Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: lit-uriy от Январь 20, 2009, 10:08 2 kuzulis, для чистоты проверь в несколько итераций, если возвращается к одному и тому же значению, то скорее всего утечки нет.
Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 10:41 Цитировать 2 kuzulis, для чистоты проверь в несколько итераций, если возвращается к одному и тому же значению, то скорее всего утечки нет. не... потребление памяти растет ... я сделал i<1000000 .... и после удаления и последующего создания - память не высвобождается польностью, а накапливается... вот накопил до 60 Мб :)но ведь после delete нужно обнулить указатель... а как это в QList можно сделать? ведь после удаления из QList - уже доступ никак к указателю через QList не получить (т.к он уже удален из QList) :-\ Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: Winstrol от Январь 20, 2009, 10:51 но ведь после delete нужно обнулить указатель... Обнулять указатели после delete не нужно. В профилактических целях даже нельзя. Что касается утечки, то полный код код, локализованный в одной фунции посмотреть бы. Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: Rcus от Январь 20, 2009, 10:53 Код
У меня в несколько модифицированном тесте объем потребляемой памяти стабилизировался после первой итерации, ищите дальше. Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: spirit от Январь 20, 2009, 10:57 а dtor'ы TestClass и всех ваших классов вызываются и отрабатываются верно(поставте бряку или qDebug, что бы убедиться)?
ЗЫ. можно также для удаления юзать qDeleteAll. Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 11:03 Цитировать а dtor'ы TestClass и всех ваших классов вызываются и отрабатываются верно(поставте бряку или qDebug, что бы убедиться)? если можно, то поподробнее пжлста ! где что ставить? (я ж новичек ! :) ) вот реализация TestClass к примеру: *.h Код: #ifndef MYCLASS_H *.cpp Код: #include "myclass.h" Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 11:11 Цитировать У меня в несколько модифицированном тесте объем потребляемой памяти стабилизировался после первой итерации, ищите дальше. у меня если жмакаю "создать 10000 объектов" а потом жмакаю "очистить лист" - то тоже вроде устаканивается (хотя по 1-10 байт набирает потихоньку все-равно) а вот если жмакаю несколько раз "создать 10000 объектов" - а потом "очистить лист" - то память накапливается! Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: spirit от Январь 20, 2009, 11:14 в класс TestClass добавте деструктор и там уже qDebug.
Код но вроде в коде все нормально. Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 11:23 2 spirit
я сделал как посоветовали: 1. в консоли мильон раз (i<1000000) отобразилось сообщение: TestClass::dtor called 2. пока оно выводилось - память потребляемая увеличивалась + приложение подвисло 3. после того как выводится сообщения перестали - память стабилизировалась + приложение отвисло Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: Winstrol от Январь 20, 2009, 11:53 На вид все вроде правильно.
Но: -память очень желательно отдавать в обратном порядке тому, в котором она выделялась, если нет веских причин не делать этого. Это снизит фрагментацию кучи. -выделять стандартным аллокатором кучу маленьких объектов - зло. Надо пользоваться каким либо small object allocator / pool и.т.п. Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 12:41 2 Winstrol ,
а где взять : Цитировать Надо пользоваться каким либо small object allocator / pool и.т.п. ??? это спец. библиотека нужна с этими функциями? Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: Winstrol от Январь 20, 2009, 13:17 2 Winstrol , Можно и самому написать - много где описано. Случай-то классический. Можно Boost скачать. Тогда примерно так будет выглядетьа где взять : Цитировать Надо пользоваться каким либо small object allocator / pool и.т.п. ??? это спец. библиотека нужна с этими функциями? Код
Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 13:27 2 Winstrol ,
спасибо, буду пробовать! :) Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: Winstrol от Январь 20, 2009, 14:09 2 Winstrol , Прошу прощения. Так, как показал пробывать не надо.:) И скачивать тоже не обязательно.спасибо, буду пробовать! :) Код
Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 20, 2009, 14:14 Цитировать TestClass *tc = stdTestClassAlloc.allocate(1); а что значит 1 в вызове allocate(тут) ? Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: Winstrol от Январь 20, 2009, 15:13 Цитировать TestClass *tc = stdTestClassAlloc.allocate(1); а что значит 1 в вызове allocate(тут) ? Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: kuzulis от Январь 21, 2009, 13:08 Спасибо! Буду пробовать!
Название: Re: QList . Как узнать, правильно ли удаляются указатели? Отправлено: pastor от Январь 21, 2009, 13:15 Если есть возможность, проверь на утечки при помощи Valgrind. Глянь вот эту тему (http://www.prog.org.ru/topic_2196_0.html).
|