crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 9.5.2024, 18:19