try / catch块失败,应用程序崩溃

时间:2010-12-05 21:11:13

标签: c++ visual-c++

我有以下代码

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

catch (...) { return; }

如果我禁用了网络适配器,我的应用程序崩溃了。是不是应该抓住这样的错误?

3 个答案:

答案 0 :(得分:1)

如果没有将VS设置为正确,那么它将不会捕获SEH异常,例如访问冲突,尽管可以将其设置为捕获catch(...)块中的SEH异常。最初不要表现出问题可能只是一个更好的主意,SEH例外通常表明你做了一些严重的错误。

答案 1 :(得分:1)

这只是一个猜测但你可能在hostEntry返回后没有检查gethostbyname并且你得到了一个N​​ULL指针。在使用之前检查它是否为空。

答案 2 :(得分:1)

如果没有更多代码,很难在此处得出一个明确的结论,但我认为由于网络不可用,hostEntry或其h_addr_list字段为NULL。您的代码只处理C ++异常,您需要将其增强到handle structured exceptions(例如访问冲突),以便执行您期望的操作。

最好只修复代码,使其在gethostbyaddr 之前的错误之后不使用无效指针(无论如何,无论是否有任何异常处理增强,您都应该这样做)