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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отловить ошибку сегментации на программном уровне?  (Прочитано 4323 раз)
yarick
Гость
« : Ноябрь 25, 2012, 08:38 »

В программе довольно часто возникают ошибки типа null pointer... как их отловить, чтобы сохранить данные? Или возможно обработать. Допустим если у меня несколько QMainWindows - не закрывать же все если только в одном ошибка произошла

Проверка на равенство NULL - это часный случай. Обычно бывает так что указатель не равен NULL и указывает на участок в памяти, который был освобождён. Как проверить указатель на валидность перед обращением?
« Последнее редактирование: Ноябрь 25, 2012, 10:19 от Ярик » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Ноябрь 25, 2012, 10:24 »

- не закрывать же все если только в одном ошибка произошла
Это не столь очевидно. Многие (в том числе и я) придерживаются мнения что фатальные ошибки отлову и обработке не подлежат - их надо исправлять. А если оптимизма много, то в разделе "кладовая" был пост как ловить, найдете.

Проверка на равенство NULL - это часный случай. Обычно бывает так что указатель не равен NULL и указывает на участок в памяти, который был освобождён. Как проверить указатель на валидность перед обращением?
Знову за рибу грошi  Плачущий  В языке C/C++ таких средств нет (и это правильно)
« Последнее редактирование: Ноябрь 25, 2012, 10:29 от Igors » Записан
Akon
Гость
« Ответ #2 : Ноябрь 25, 2012, 10:48 »

Цитировать
Проверка на равенство NULL - это часный случай. Обычно бывает так что указатель не равен NULL и указывает на участок в памяти, который был освобождён. Как проверить указатель на валидность перед обращением?
Это никак полностью не проверишь. Можно использовать нативный механизм ОС для проверки допустимости обращения к памяти (например, под Win использовать SEH и ловить Access Violation), но так указатель может быть кривым и указывать на валидную память.
Записан
Bepec
Гость
« Ответ #3 : Ноябрь 25, 2012, 12:22 »

Я тоже горел идеей отлавливать эти ошибки (как и каждый, кто с ними сталкивался, думаю). Но под конец ничего лучше, как "сделать дамп", закрыть программу, выдать предупреждение не нашёл.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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