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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Программа падает, if\try\catch etc не помогают, что делать ?  (Прочитано 3655 раз)
yesrus
Гость
« : Май 14, 2009, 18:47 »

qt 4.5.1
Вобщем падает программа на операции присвоения 1... есть некая переменная int в кастом классе который наследуется от пашбаттона, путем дебага выловил, что крашит именно на команде stat = 1; пробовал помещать в if ( stat = 1) пробовал в try { stat = 1; } catch..... бесполезно...падает мертво, что делать и как найти причину крашей ?
Падает постоянно после определенных действий...т.е. если их не выполнять то хоть 100 этих кастом кнопок будут норм. работать...причем во время нормальной работы будет так же выполняться тот же самый кусок кода который вызывает краш.
Весь код выкладывать не могу, могу выслать кому-нибудь в личку.
 Грустный
« Последнее редактирование: Май 14, 2009, 18:52 от yesrus » Записан
EhTemka
Гость
« Ответ #1 : Май 14, 2009, 18:54 »

Убедись, что класс "который наследуется от пашбаттона" уже создан на момент присвоения.
Записан
ритт
Гость
« Ответ #2 : Май 14, 2009, 19:12 »

первая мысль - mainbuttonmap.value(channel) возвращает невалидный указатель.
сложно угадывать, не видя хотя бы кода создания/использования кнопки и декларации/конструктора класса кнопки
Записан
EhTemka
Гость
« Ответ #3 : Май 14, 2009, 19:32 »

Цитировать
К тому же если бы указатель был не валидным то и до stat действие бы не доходило

Не факт. Поставь проверку

Код:
void gui::newState(const QString &channel, const int &state) {
     if (state == 5) {
      fbutton *a = mainbuttonmap.value(channel);
      if (a)
          a->startblink();
  }
}


Я почти уверен что дело в этом...
Записан
yesrus
Гость
« Ответ #4 : Май 14, 2009, 19:41 »

Цитировать
К тому же если бы указатель был не валидным то и до stat действие бы не доходило

Не факт. Поставь проверку

Код:
void gui::newState(const QString &channel, const int &state) {
     if (state == 5) {
      fbutton *a = mainbuttonmap.value(channel);
      if (a)
          a->startblink();
  }
}


Я почти уверен что дело в этом...
Спасибо!
Вы оказались правы  Улыбающийся единственное место в котором не было проверки существования канала. (добавил if (mainbuttonmap.contains(channel)) .... и все ок)
« Последнее редактирование: Май 14, 2009, 19:53 от yesrus » Записан
ритт
Гость
« Ответ #5 : Май 14, 2009, 19:58 »

ох, не верю )
Записан
ритт
Гость
« Ответ #6 : Май 14, 2009, 20:03 »

код удалил (шибко секретный, что ли?) - теперь по памяти придётся...
mainbuttonmap - вроде бы QMap или QHash - документация говорит, что при отсутствующем ключе ::value(..) возвращает значение по умолчанию; для QPushButton* значением по умолчанию будет (QPushButton*)0, а при попытке доступа к члену несуществующего объекта получаем сегфолт...
...примерно так
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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