crossplatform.ru

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


  Ответ в Валидность строки
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Tonal Дата 7.8.2008, 7:34
 
Цитата(AD @ 6.8.2008, 17:38) *
2) А с инициализацией - это да! Проблема в том, что не могу конструктор создать. Нельзя.

Серый волк не даёт? :o:
AD Дата 6.8.2008, 13:38
 
Цитата(Tonal @ 6.8.2008, 14:25) *
1) Плохо использовать глобальные переменные.
2) Совсем плохо не инициализировать переменные.

1) Приведенный пример далек от программы. Я не использую глобальных переменных
2) А с инициализацией - это да! Проблема в том, что не могу конструктор создать. Нельзя.
Tonal Дата 6.8.2008, 13:25
  1) Плохо использовать глобальные переменные.
2) Совсем плохо не инициализировать переменные.
AD Дата 6.8.2008, 12:57
  Виноват, забыл написать еще один момент: вылетало при использовании hard_event
if(hard_event != 0)
{
     if(!hard_event -> ev_name.isNull())
    {
         if(!hard_event -> ev_name.isEmpty())    // вот на этой строке как-раз и вылетал
         {
                  // что-то делается
         }
    }
}
AD Дата 6.8.2008, 10:29
 
Цитата(trdm @ 6.8.2008, 10:50) *
(17)
Типа:
QString* str;
if (str->isEmpty()) {
трах-бабах.....
}

Нет совсем не то! Вот так:

struct HARDEVENT
{
         int address;
         QString ev_name;
         HARDEVENT(): address(0), ev_name("") {}
         HARDEVENT(const HARDEVENT& ev): address(ev.address), ev_name(ev.ev_name) {}
};

// где-то
HARDEVENT* hard_event;

// еще где-то
void setHardEvent(HARDEVENT* evn)
{ 
      hard_event = (evn == 0) ? 0 : new HARDEVENT(evn);
}

// И в итоге - но этот set выполняется только при некоторых условиях
//  а в других случаях в hard_event и не нулевой указатель, и не корректное значение
// evn != 0
setHardEvent(evn);


/* а надо было перед этим сделать такое действие*/
hard_event = 0;
trdm Дата 6.8.2008, 9:50
  (17)
Типа:
QString* str;
if (str->isEmpty()) {
трах-бабах.....
}
AD Дата 6.8.2008, 9:07
 
Цитата(Tonal @ 6.8.2008, 8:13) *
2 AD
Скорее всего строка тут не причём. :)
Подобные вещи происходят тогда, когда ты разрушил память - кучу или стек.
Например вылетел за границы массива, дважды удалил один и тот же объект, или просто поработал по неинециализированному указателю.
Вот программа и валится в самых неожиданных местах.

Проблема решена.
Tonal, был прав! :) У меня в указателе самом лежал мусор! При обнулении указателя такое перестало происходить!
AD Дата 6.8.2008, 8:28
 
Цитата(Tonal @ 6.8.2008, 8:13) *
2 AD
Скорее всего строка тут не причём. :)
Подобные вещи происходят тогда, когда ты разрушил память - кучу или стек.
Например вылетел за границы массива, дважды удалил один и тот же объект, или просто поработал по неинециализированному указателю.
Вот программа и валится в самых неожиданных местах.

да я и указатель проверяю, естественно. Он в этот момент валидный, а строка почему-то нет! :(
Вот так это выглядит в дебаггере:
[attachment=164:debugger.JPG]
Tonal Дата 6.8.2008, 7:13
  2 AD
Скорее всего строка тут не причём. :)
Подобные вещи происходят тогда, когда ты разрушил память - кучу или стек.
Например вылетел за границы массива, дважды удалил один и тот же объект, или просто поработал по неинециализированному указателю.
Вот программа и валится в самых неожиданных местах.

2 void*
Если конструктор вызвался - объект уже инициализирован.
В QString() все данные корректно инициализируются, так что мусора там быть не может. Кроме случаев удара по памяти. :)
AD Дата 6.8.2008, 0:15
 
Цитата(void* @ 5.8.2008, 22:36) *
тогда код в студию, гадание на кофейной гуще нынче не в моде :)

Да код обычный, где-то строка создается с пустым значением. Где-то ей присваивается значение. А где-то используется. Вот там, где используется, там и ломается программа!
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 12.7.2025, 5:16