![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Что-то я не понимаю, что за ерунда происходит: делаю проверку на isNull(), на isEmpty() - все это компилятор проглатывает, а строка так и остается невалидной. При присвоении другой строке он вылетает. Как исправить это глюк?
|
|
|
![]() |
trdm |
![]()
Сообщение
#2
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
trdm |
![]()
Сообщение
#4
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
кодом поделись как сломать строку %)
|
|
|
void* |
![]()
Сообщение
#5
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
а ты вообще чувствуешь разницу между null и has no characters(empty)?
строка является null, когда использован конструктор по умолчанию, т.е.
а пустой(empty, has no characters) она является в таком случае:
теперь понятно? ![]() в твоем случае, ты скорее всего делал так:
т.к. именно в этом случае isNull вернет false, а isEmpty - true и получится: !isNull() == true, !isEmpty() == false Сообщение отредактировал void* - 5.8.2008, 20:12 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
void* |
![]()
Сообщение
#7
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
естественно должна вылетать т.к. ты присваиваешь всякий мусор, потому что строка не инициализирована, т.к. использован дефолтный конструктор
Сообщение отредактировал void* - 5.8.2008, 20:23 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
void* |
![]()
Сообщение
#9
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
void* |
![]()
Сообщение
#11
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
могу лишь еще предположить, что под словом "ломается" он имел ввиду возвращение выражением !isEmpty() значения false
![]() ждем виновника торжества © ![]() |
|
|
AD |
![]()
Сообщение
#12
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Вах! Сколько всего понаписали, е-мое!
![]() 1) Я естественно знаю разницу между null and empty! 2) В конструкторе по-умолчанию я строке намеренно присвавиваю значение "", чтобы не было у меня неиницилизированной строки! 3) Ломается, вылетает - это значит, что при запуске на исполнение программа вылетает в дебаггер (если под ним запущена) или же выдает ошибку и выходит из программы (если без дебаггера)! Смысл в том, что на строчке, где я пытаюсь проверить значение на пустоту isEmpty(), он вылетает. В дебаггере видно, что строка какая-то некорректная, но при этом он не считает ее за null! Завтра могу прислать картинку, как видно эту строку в дебаге! 4) Сижу за компом не у себя дома и не на работе, а тут одностроковые строчки кода, почему-то не видны! ![]() ![]() Сообщение отредактировал Багира - 2.6.2017, 23:03 |
|
|
void* |
![]()
Сообщение
#13
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
тогда код в студию, гадание на кофейной гуще нынче не в моде
![]() |
|
|
AD |
![]()
Сообщение
#14
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Tonal |
![]()
Сообщение
#15
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
2 AD
Скорее всего строка тут не причём. ![]() Подобные вещи происходят тогда, когда ты разрушил память - кучу или стек. Например вылетел за границы массива, дважды удалил один и тот же объект, или просто поработал по неинециализированному указателю. Вот программа и валится в самых неожиданных местах. 2 void* Если конструктор вызвался - объект уже инициализирован. В QString() все данные корректно инициализируются, так что мусора там быть не может. Кроме случаев удара по памяти. ![]() Сообщение отредактировал Tonal - 6.8.2008, 7:15 |
|
|
AD |
![]()
Сообщение
#16
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
2 AD Скорее всего строка тут не причём. ![]() Подобные вещи происходят тогда, когда ты разрушил память - кучу или стек. Например вылетел за границы массива, дважды удалил один и тот же объект, или просто поработал по неинециализированному указателю. Вот программа и валится в самых неожиданных местах. да я и указатель проверяю, естественно. Он в этот момент валидный, а строка почему-то нет! ![]() Вот так это выглядит в дебаггере: [attachment=164:debugger.JPG] |
|
|
AD |
![]()
Сообщение
#17
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
2 AD Скорее всего строка тут не причём. ![]() Подобные вещи происходят тогда, когда ты разрушил память - кучу или стек. Например вылетел за границы массива, дважды удалил один и тот же объект, или просто поработал по неинециализированному указателю. Вот программа и валится в самых неожиданных местах. Проблема решена. Tonal, был прав! ![]() |
|
|
trdm |
![]()
Сообщение
#18
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
(17)
Типа: QString* str; if (str->isEmpty()) { трах-бабах..... } |
|
|
AD |
![]()
Сообщение
#19
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
(17) Типа: QString* str; if (str->isEmpty()) { трах-бабах..... } Нет совсем не то! Вот так:
Сообщение отредактировал AD - 6.8.2008, 10:35 |
|
|
AD |
![]()
Сообщение
#20
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Виноват, забыл написать еще один момент: вылетало при использовании hard_event
|
|
|
Tonal |
![]()
Сообщение
#21
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
1) Плохо использовать глобальные переменные.
2) Совсем плохо не инициализировать переменные. |
|
|
AD |
![]()
Сообщение
#22
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Tonal |
![]()
Сообщение
#23
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 24.6.2025, 10:21 |