Russian Qt Forum
Июнь 08, 2024, 16:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Ошибка  (Прочитано 13364 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Июнь 06, 2013, 11:38 »

Тестирую код программы.
Сначала работает нормально.
Затем после некоторых манипуляций
происходит зависание.

Во вложение картинка с сообщением.
Что это за ошибка и как от нее избавиться?


Записан
mutineer
Гость
« Ответ #1 : Июнь 06, 2013, 11:39 »

ошибка работы с памятью. Обращение по дикому указателю, скорее всего
« Последнее редактирование: Июнь 06, 2013, 11:42 от mutineer » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #2 : Июнь 06, 2013, 11:45 »

В консоль без дебага выдает код ошибки -805306369.

ошибка работы с памятью. Обращение по дикому указателю, скорее всего
И что делать-то???
Записан
mutineer
Гость
« Ответ #3 : Июнь 06, 2013, 11:47 »

Искать где ты портишь какой-то указатель. Или где-нить выходишь за пределы массивы. В общем искать неверную работу с памятью. Возможно тебе поможет стек (в нижнем левом углу твоего скриншота)
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #4 : Июнь 06, 2013, 11:50 »

М-да наверное это надолго В замешательстве
Записан
mutineer
Гость
« Ответ #5 : Июнь 06, 2013, 11:57 »

Судя по количеству файлов да
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #6 : Июнь 06, 2013, 12:01 »

Судя по количеству файлов да
Ну не так и много )
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #7 : Июнь 06, 2013, 12:02 »

Наверное, проще переписать все...
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #8 : Июнь 06, 2013, 12:31 »

не могу понять, уже тестирую код как полчаса,багов нет.
 Непонимающий Непонимающий Непонимающий
Записан
mutineer
Гость
« Ответ #9 : Июнь 06, 2013, 12:37 »

Да, это тяжелоуловимая ошибка. Потому что память под битым указателем может быть выделена, а может и не быть, как повезет
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #10 : Июнь 06, 2013, 13:17 »

А может эта ошибка возникать из-за ОС???
ole32.dll может вызывать сообщение об ошибке в Винде.
У меня Windows7.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #11 : Июнь 06, 2013, 13:20 »

даже не надейся на это, точно где-то битый указатель сидит. первым делом поищи по слову delete — может ты где-то руками удаляешь объект, которому назначен родитель.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #12 : Июнь 06, 2013, 13:59 »

может ты где-то руками удаляешь объект, которому назначен родитель.
Эта ситуация обрабатывается в деструкторе и совершенно не опасна.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #13 : Июнь 06, 2013, 15:20 »

Вот код с удалением объектов
можете сказать что тут может быть неправильно

Код:
void Widget::deletePlot(QTreeWidgetItem * item)
{
    w->removePlotItem(((TreeWidgetItem*)item)->pw->lwi);

    listPlotWidget.removeOne(((TreeWidgetItem*)item)->pw);
    ((TreeWidgetItem*)item)->pw->deleteLater(); //может стоить заменить deleteLater() на close()???

    itemdeSelectColor(item);
    ((TreeWidgetItem*)item)->checkFlag = false;
}

Код:
void widgetPlots::removePlotItem(ListWidgetItem*lwi)
{
    qDebug()<<"removePlotItem";
    list_pws.removeOne(lwi->pw);
    list_widget->removeItemWidget(lwi);
    delete lwi;
}

Код:
void Widget::sl_deletePlotWidget(plotWidget *pw)
{
    w->removePlotItem(pw->lwi);
    pw->item->checkFlag = false;
    itemdeSelectColor(pw->item);
    listPlotWidget.removeOne(pw);
    pw->close();//pw->deleteLater();
}
« Последнее редактирование: Июнь 06, 2013, 15:35 от demaker » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #14 : Июнь 06, 2013, 16:31 »

Вот код с удалением объектов
можете сказать что тут может быть неправильно

Код:
void Widget::deletePlot(QTreeWidgetItem * item)
{
    w->removePlotItem(((TreeWidgetItem*)item)->pw->lwi);

    listPlotWidget.removeOne(((TreeWidgetItem*)item)->pw);
    ((TreeWidgetItem*)item)->pw->deleteLater(); //может стоить заменить deleteLater() на close()???

    itemdeSelectColor(item);
    ((TreeWidgetItem*)item)->checkFlag = false;
}

Код:
void widgetPlots::removePlotItem(ListWidgetItem*lwi)
{
    qDebug()<<"removePlotItem";
    list_pws.removeOne(lwi->pw);
    list_widget->removeItemWidget(lwi);
    delete lwi;
}

Код:
void Widget::sl_deletePlotWidget(plotWidget *pw)
{
    w->removePlotItem(pw->lwi);
    pw->item->checkFlag = false;
    itemdeSelectColor(pw->item);
    listPlotWidget.removeOne(pw);
    pw->close();//pw->deleteLater();
}
невалидный или нулевой указатель в процедуру передаваться может. А так вроде хорошо все.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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