Russian Qt Forum
Ноябрь 05, 2024, 22:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Ошибка памяти при работе с моделью дерева  (Прочитано 9797 раз)
SmileGobo
Гость
« Ответ #15 : Апрель 05, 2012, 15:15 »

Все спасибо ща еще раз вдумчиво покурю свой код, а то у меня еще в версиях кода началась путаница =\
ЗЫ про   if(item) я чего-то видимо не знаю....
Записан
Bepec
Гость
« Ответ #16 : Апрель 05, 2012, 15:27 »

Попробуй сам Веселый

Создай неинициализированный указатель и проверь его на эти условия Подмигивающий

PS я долго радовался такому способу проверки указателей. Минуты полторы. До тех пор пока обратился по указателю к какой то памяти и убил систему в BSOD Веселый
Записан
V1KT0P
Гость
« Ответ #17 : Апрель 05, 2012, 15:49 »

Все спасибо ща еще раз вдумчиво покурю свой код, а то у меня еще в версиях кода началась путаница =\
ЗЫ про   if(item) я чего-то видимо не знаю....
У тебя в функцию:
Код
C++ (Qt)
BSBDModel::parent
Передается удаленный QModelIndex. Вот только откуда не могу понять.
Записан
Bepec
Гость
« Ответ #18 : Апрель 05, 2012, 17:49 »

У тебя в функцию:
Код
C++ (Qt)
BDSMModel::parent
Передается удаленный QModelIndex. Вот только откуда не могу понять.

 Веселый

А стек вызовов посмотреть не судьба?
Записан
V1KT0P
Гость
« Ответ #19 : Апрель 05, 2012, 18:01 »

У тебя в функцию:
Код
C++ (Qt)
BDSMModel::parent
Передается удаленный QModelIndex. Вот только откуда не могу понять.

 Веселый

А стек вызовов посмотреть не судьба?
Конечно смотрел из QAbstractItemView вызывается, а как туда индекс попал без понятия. Мне разбираться даже не охота. Тут явно автор что-то не то делает, либо забывает откуда-то удалить, либо неправильно реализовал логику.
Там конечно патч на пару строк решает проблему падения при удалении. Но это бред, надо искать причину а не устранять последствия.

добавлено:
Короче ошибка появляется только при первом добавлении после удаления. Наверно перед вставкой нового объекта вызываются функции которые пытаются достать этот еще не добавленный объект. Пока что можно временно пофиксить вот так:
Код
C++ (Qt)
TreeItemBase *BSBDModel::getItem(const QModelIndex &index) const{
   if (index.isValid()) {
       TreeItemBase *item = static_cast<TreeItemBase*>(index.internalPointer());
       if (!root->isContains(item)) {
           qDebug() << "ERROR!!!";
           return root;
       }
       if (item) return item;
   }
   return root;
}
Код
C++ (Qt)
bool TreeItemBase::isContains(TreeItemBase *item)
{
   return child_items.contains(item);
}
 
« Последнее редактирование: Апрель 05, 2012, 18:53 от V1KT0P » Записан
SmileGobo
Гость
« Ответ #20 : Апрель 06, 2012, 10:17 »

Да видимо где-то, я не соблюдаю соглашение по интерфейсу, попробую взять готовую модельку из примера и через наследование свой функционал реализовать.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 21.