在c+中使用异常处理的一个小问题+; 下面给出的简单异常程序给出未处理异常“微软C++异常:内存位置0x00 12FE9..”。函数EXEP()返回后,我立即收到此错误。 请告诉我为什么会出现这个错误。此外,如果解释/分析了本规范中所有可能的错误,也会有所帮助。我正在学习更好的编码 我使用Visual C++ 2005。
在c+中使用异常处理的一个小问题+; 下面给出的简单异常程序给出未处理异常“微软C++异常:内存位置0x00 12FE9..”。函数EXEP()返回后,我立即收到此错误。 请告诉我为什么会出现这个错误。此外,如果解释/分析了本规范中所有可能的错误,也会有所帮助。我正在学习更好的编码 我使用Visual C++ 2005。,c++,visual-c++,exception-handling,C++,Visual C++,Exception Handling,#include <iostream> using namespace std; int main () { int excep(int); throw excep(20); return 0; } int excep(int e) { cout << "An exception occurred. Exception Nr. " << e << endl; return 0; } #包括 使用名称空
#include <iostream>
using namespace std;
int main ()
{
int excep(int);
throw excep(20);
return 0;
}
int excep(int e)
{
cout << "An exception occurred. Exception Nr. " << e << endl;
return 0;
}
#包括
使用名称空间std;
int main()
{
int excep(int);
投掷练习(20);
返回0;
}
整数例外(整数e)
{
cout如果您试图学习异常抛出/处理,您的代码将包含错误。
函数EXEP必须处理抛出的对象,而不是自身抛出的对象。
您的代码必须重写如下:
using namespace std;
int excep(int e)
{
cout << "An exception occurred. Exception Nr. " << e << endl;
return 0;
}
int main ()
{
int excep(int);
try
{ // <--------- Begin of try block. required part of the exception handling
throw 20;
}
catch (const int &errCode) // <------- we are catching only ints
{
excep(errCode); // Function that handles exception
}
return 0;
}
使用名称空间std;
整数例外(整数e)
{
你能想象会发生什么吗
你调用一个函数,它打印出“一个异常发生了”,加上其他文本,然后你把结果值作为一个异常抛出,你永远不会捕捉到它,所以程序报告抛出的不是一个未捕获的异常。这是真的,因为这正是你刚才所做的
异常的整个要点是,当您抛出异常时,它将通过程序传播出去,直到它被处理,或者到达顶层并终止程序。您不处理异常,因此它终止程序
如果要处理异常,需要将抛出代码包装在try
块中,然后是catch
,如下所示:
try {
throw excep(20);
}
catch (int ex) {
// do something about the exception
}
排队
throw excep(20);
首先调用excep(20)
,然后抛出其返回值,即抛出一个整数。它大致相当于:
const int i = excep(20);
throw i;
要了解异常snytax的外观,请执行以下操作:
#include <iostream>
#include <stdexcept>
using namespace std;
int main ()
{
try {
// do something
throw std::runtime_error("test");
} catch (const std::exception &e) {
std::cout << "exception: " << e.what() << std::endl;
}
}
#包括
#包括
使用名称空间std;
int main()
{
试一试{
//做点什么
抛出std::运行时_错误(“测试”);
}捕获(const std::exception&e){
std::这对困惑的提问者并没有真正的帮助。问题不是一个意外的例外,而是他把语法搞错了。@phresnel-你是读心术还是什么?OP要求纠正他的语法在哪里?@phresnel:你知道,首先,我对你的读心术感到非常惊讶。特别是考虑到OP从字面上说,我没有捕捉异常的语法,我发现很难同意“他只是把语法搞错了”的说法。问题是他抛出了一个他没有捕获到的异常。解决方法是了解异常处理是如何工作的。如果我错了,请纠正我,但我相信我的回答也说明了语法,所以我甚至不确定你在抱怨什么。@DumbCoder(CC@Jalf):他/她没有,这正是问题所在;这在某种程度上意味着OP假定某些内容是正确的,并且正在某个正交主题中查找错误。源代码imho self记录了execp()
应该是一个异常处理程序:发生异常。异常编号
。我怀疑execp
是否是一个“装饰者”我读了代码,是由一个没有经验的C++程序员编写的。谢谢Jalf,我试过这种方法,我记得我读了很久,编译器将把代码重写为TestCcatch块,所以我只是试验了一下,我认为它工作得很好,但是为什么内存异常会出现在int中。现在我假设我错了。hresnel-想解释吗?@phresnel-现在你说得很含糊。你不解释你的意思,然后劫持主题。在指责别人时最好保持理智。在指责别人之前提出你的观点。不必愚蠢。这是一个评论部分而不是回答部分。如果你y OP认为他正在捕获一个异常,而感叹号是什么时候变得粗鲁的?@phresnel:我在这些评论中只看到一个人过度使用感叹号。我想说,如果你认为你的异常正在被捕获,被告知这不是纠正问题的非常好的第一步。另外,你能接受吗“比你更神圣”的态度,并把它坚持在没有阳光的地方?你可以说你想说的话,而不需要“不像你”“胡说。噢,我可以知道为什么这个问题得到-1吗flag@DumbCoder:是的。只有哪本书?至于感叹号:我觉得一本就足够了。不止一本书会读起来像是喊叫、命令、咆哮、谩骂,或者只是孩子气。虽然这是我读过之后的感受,但一些文章证实了这一点:,(搜索感叹号),。谢谢弗雷斯内尔,我得到了我错过的要点。谢谢你的参考