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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Ошибка памяти при работе с моделью дерева  (Прочитано 10220 раз)
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.057 секунд. Запросов: 18.