Утечка памяти QTreeWidget. Может баг QT ? |
Здравствуйте, гость ( Вход | Регистрация )
Утечка памяти QTreeWidget. Может баг QT ? |
Алексей1153 |
9.8.2010, 12:36
Сообщение
#21
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Красную надпись объяснить легко "QList<T>::operator[]", "index out of range" Ну вот нет, не совсем всё так просто... Дело в том, что размер QList в моменты удаления элементов дерева не меняется - он вообще ничего не знает об этом. Индексы все корректные, но природу надписи что-то я не понял, когда сейчас попристальнее присмотрелся - даже ещё когда элементы не удалены из дерева, надпись тоже появляется )) (хотя, до удаления по указателю сидят, и это видно через вьюер переменных, корректные данные, а после удаления - not accessible) Тогда уж так ну а тут разницы никакой, дело привычки. Я как-то while вобще не использую Сообщение отредактировал Алексей1153 - 9.8.2010, 12:37 |
|
|
dreamcode |
9.8.2010, 13:25
Сообщение
#22
|
Студент Группа: Участник Сообщений: 52 Регистрация: 2.11.2009 Пользователь №: 1201 Спасибо сказали: 1 раз(а) Репутация: 0 |
блин, еще раз - диспетчер показывает ОБЩУЮ память приложения, когда-либо выделенную осью аппликухе. Удалив айтемы, память операционке ты не вернешь (да и не нужно это). В куче будет свободная память, которая может быть использована как повторно в тривьюхе, так и в других местах. Пример - создав строку размером 500 метров ты отожрешь 500 метров ОП и диспетчер этр покажет. Удалив строку, ты освободищь память в куче и создав такую же строку еще раз, память у ОС запрашиваться не будет (в диспетчере будет те же 500мб) А вот и ни фига... Когда выделил память один рас (500 метров ушло) потом очистил и опять выделяешь (и опять 500 метров ушло) в суме уже один гиг.... Но так и всю оперативу можно израсходовать !!!! Что же тогда делать ??? |
|
|
Алексей1153 |
9.8.2010, 13:30
Сообщение
#23
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
dreamcode, щас времени повозиться нет (на работе), но, может сам сможешь (если чё - вечером сам попробую) - произведи класс от QTreeWidgetItem
там в конструкторе и деструкторе выводи в консоль соответствующие сообщения. Если деструкторов вызвалось столько же, сколько конструкторов - то всё ок, а значит, ошибка в Qt. много элементов тут не нужно создавать |
|
|
dreamcode |
9.8.2010, 13:32
Сообщение
#24
|
Студент Группа: Участник Сообщений: 52 Регистрация: 2.11.2009 Пользователь №: 1201 Спасибо сказали: 1 раз(а) Репутация: 0 |
Удалив строку, ты освободищь память в куче и создав такую же строку еще раз, память у ОС запрашиваться не будет (в диспетчере будет те же 500мб) Для теста напиши вставку в лист 1000 строк (посмотри на память в диспетчере) она возрастет потом очисть лист (смотрим опять в диспетчер) . О ЧУДО память уменьшилась . Как тогда такое объяснить то ??? |
|
|
Текстовая версия | Сейчас: 19.4.2024, 22:33 |