блокировка try / catch завершается сбоем и происходит сбой приложения - PullRequest
1 голос
/ 06 декабря 2010

У меня есть следующий код

try { 
    clientService.sin_family = AF_INET;
    clientService.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list); //fails
    clientService.sin_port = htons(port);
    }

catch (...) { return; }

Если я отключаю сетевой адаптер, мое приложение вылетает.Разве такие ошибки не должны быть обнаружены?

Ответы [ 3 ]

1 голос
/ 06 декабря 2010

Это только предположение, но вы, вероятно, не проверили hostEntry после того, как gethostbyname вернулось, и вы получили NULL-указатель. Проверьте его, если он нулевой, прежде чем его использовать.

1 голос
/ 06 декабря 2010

Трудно прийти к четкому выводу без большего количества кода, но я представляю, что hostEntry или его поле h_addr_list равно NULL из-за недоступности сети.Ваш код обрабатывает только исключения C ++, и вам нужно улучшить его до для обработки структурированных исключений (например, нарушение доступа), чтобы это делало то, что вы ожидаете.

Желательно просто исправить код, чтобы он не использовал недействительные указатели после более ранней ошибки на gethostbyaddr и др. (вы, вероятно, должны делать это в любом случае, независимо от каких-либо улучшений обработки исключений).

1 голос
/ 06 декабря 2010

Если вы не установите VS правильно, то он не будет перехватывать исключения SEH, такие как нарушения доступа, хотя можно настроить его на перехват исключений SEH в блоках catch (...).Вероятно, это просто лучшая идея, чтобы не показывать проблему в первую очередь, исключения SEH обычно являются показателем того, что вы сделали что-то серьезно неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...