crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Утечка памяти QTreeWidget. Может баг QT ?
Алексей1153
  опции профиля:
сообщение 9.8.2010, 12:36
Сообщение #21


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(igor_bogomolov @ 9.8.2010, 15:20) *
Красную надпись объяснить легко
"QList<T>::operator[]", "index out of range"

Ну вот нет, не совсем всё так просто... Дело в том, что размер QList в моменты удаления элементов дерева не меняется - он вообще ничего не знает об этом. Индексы все корректные, но природу надписи что-то я не понял, когда сейчас попристальнее присмотрелся - даже ещё когда элементы не удалены из дерева, надпись тоже появляется ))
(хотя, до удаления по указателю сидят, и это видно через вьюер переменных, корректные данные, а после удаления - not accessible)


Цитата(igor_bogomolov @ 9.8.2010, 15:20) *
Тогда уж так

ну а тут разницы никакой, дело привычки. Я как-то while вобще не использую :)

Сообщение отредактировал Алексей1153 - 9.8.2010, 12:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dreamcode
  опции профиля:
сообщение 9.8.2010, 13:25
Сообщение #22


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 2.11.2009
Пользователь №: 1201

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(Авварон @ 9.8.2010, 8:59) *
блин, еще раз - диспетчер показывает ОБЩУЮ память приложения, когда-либо выделенную осью аппликухе. Удалив айтемы, память операционке ты не вернешь (да и не нужно это). В куче будет свободная память, которая может быть использована как повторно в тривьюхе, так и в других местах. Пример - создав строку размером 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  


Цитата(Авварон @ 9.8.2010, 8:59) *
Удалив строку, ты освободищь память в куче и создав такую же строку еще раз, память у ОС запрашиваться не будет (в диспетчере будет те же 500мб)


Для теста напиши вставку в лист 1000 строк (посмотри на память в диспетчере) она возрастет

потом очисть лист (смотрим опять в диспетчер) . О ЧУДО память уменьшилась .

Как тогда такое объяснить то ???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 22:33