Выяснение причины падения приложения, при переключении вкладок |
Здравствуйте, гость ( Вход | Регистрация )
Выяснение причины падения приложения, при переключении вкладок |
AD |
17.6.2009, 11:10
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Приложение имеет такой вид:
Вкладка имитации работы с пульта управления [attachment=670:picture1.JPG] Вкладка имитации работы с внешних устройств [attachment=671:picture2.JPG] Первая вкладка отличается от остальных 3-x передаваемым и принимаемым пакетом данных! Если сделать следующее действие: открыть порт (текущая вкладка - 1), переключиться на другую вкладку - то в 70% случаев приложение падает. Не могу найти причину падения. Как правило в отладчике выпадает в следующую функцию (мне неясно что там может упасть):
По какой-то неизвестной мне причине падает либо на первой строчке c pStrAzimuth, либо на предпоследней. А последний раз упало на функции readSpotlight
Сообщение отредактировал AD - 17.6.2009, 11:11 |
|
|
SABROG |
17.6.2009, 12:45
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Похоже на падение при отрисовке окна вызванной сменой state в checkbox'ах. Проверь с другими стилями. Библиотека Qt собиралась на той машине, где ты её тестируешь?
|
|
|
AD |
17.6.2009, 13:14
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
AD |
17.6.2009, 14:59
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Ого... ошибка очень глубоко сидела!
Вот ошибочный код:
В функции вначале выделяется память под буферы, в которых собираются пакеты при чтении из COM-порта данных. Чтение идет посимвольно. В цикле идет чтение до тех пор, пока не встретиться заголовок след. пакета (условие выхода из цикла в while). break-выходы из цикла происходят в 2 случаях: 1) если прочитывается не тот пакет; 2) если нет символа заголовка в течение 10 секунд. Ошибка в следующем коде:
Нет проверки на то, что i, j не выходят за пределы выделенных байт. В итоге, начинается чтение в чужую память -> рушится система выделения памяти. В этом и была ошибка. Сообщение отредактировал AD - 17.6.2009, 14:59 |
|
|
Текстовая версия | Сейчас: 30.12.2024, 17:28 |