我有一个C++应用程序内置MS Visual Studio 2005链接到第三方库。对于某个输入,应用程序在第三方库中崩溃(显然在realloc.c中的某处;因此必须是某种内存问题)。我在发布中运行,因为输入是巨大的。所以我跑了,直到它崩溃,然后选择调试。当我单独调试有罪功能时,我希望使用一些异常处理来防止应用程序崩溃,而不是干脆地退出。所以我用了类似的东西:MS Visual Studio 2005 C++异常处理
try {
//- call 3rd party application function that fails
}
catch(...) {
//- handle exception or whatever
Logger::Fatal("Fatal error: Exiting...");
return false;
}
但令我惊讶的是,应用程序仍然崩溃!我期待看到它显示错误消息,因为我大概已经用省略号(...)捕获了所有异常;我在这里错过了什么?我甚至尝试在项目属性 - > C/C++ - >代码配置 - >启用异常处理中设置/ EHca(was/EHsc)。在有关可能导致问题的相关说明中,以下用法是否正确?
my_class* mc[] = {nil, nil, nil};
for (int i = 0; i < 3; ++i) {
mc[i] = new my_class();
//-Do stuff with mc[i]
if (mc[i] != nil) {
delete mc[i];
mc[i] = nil;
}
}
未能获取异常处理工作是相当令人费解。我当然会欣赏C++大师们的想法/见解。顺便说一句,同样的问题也发生在Linux(RHEL5),但我目前正试图让异常处理在Windows上工作。
注:当我让它调试后坠毁。我确实收到“访问冲突......无法读取位置”消息。有了这个更新的信息,我希望在C++中的某些东西仍然可以在Windows上运行,用于这种崩溃的Linux操作系统。
好像你期待一个'C'功能在这里抛出异常。 –
嗯...它可能的第三方应用程序调用C函数是有罪的。但是,你的意思是不行吗?那么我怎么能从C++中处理这些异常? –
除非你知道抛出了一个异常,你怎么能捕捉到它呢?也许第三方库只是崩溃而不会抛出任何异常。您需要确保第三方库发出异常。 –