我有以下代码
try {
clientService.sin_family = AF_INET;
clientService.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list); //fails
clientService.sin_port = htons(port);
}
catch (...) { return; }
如果我禁用了网络适配器,我的应用程序崩溃了。是不是应该抓住这样的错误?
答案 0 :(得分:1)
如果没有将VS设置为正确,那么它将不会捕获SEH异常,例如访问冲突,尽管可以将其设置为捕获catch(...)块中的SEH异常。最初不要表现出问题可能只是一个更好的主意,SEH例外通常表明你做了一些严重的错误。
答案 1 :(得分:1)
这只是一个猜测但你可能在hostEntry
返回后没有检查gethostbyname
并且你得到了一个NULL指针。在使用之前检查它是否为空。
答案 2 :(得分:1)
如果没有更多代码,很难在此处得出一个明确的结论,但我认为由于网络不可用,hostEntry
或其h_addr_list
字段为NULL
。您的代码只处理C ++异常,您需要将其增强到handle structured exceptions(例如访问冲突),以便执行您期望的操作。
最好只修复代码,使其在gethostbyaddr
等之前的错误之后不使用无效指针(无论如何,无论是否有任何异常处理增强,您都应该这样做)