【发布时间】:2012-05-29 12:18:04
【问题描述】:
我需要为一个研究项目学习 C++ 基础知识,并且我正在尝试错误/异常处理。我确实成功地使用了throw 命令来预测可能发生的事件(例如除以零),但我不知道如何捕获意外异常。拿这个示例代码:
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;
void arrayOutOfBound()
{
int a[3] = {1, 2, 3};
try
{
cout << "This should not display: " << a[5] << endl;
}
catch(runtime_error &e)
/* catch(exception &e) // also does not work */
{
cout << "Error: " << e.what() << endl;
}
}
int main()
{
arrayOutOfBound();
}
我想我必须在某处使用throw 语句,但假设我真的不知道a[5] 不起作用(或者用户输入了这个索引并且我没有检查数组大小),那么如何我可以防止程序崩溃吗? (这发生在 Visual C++ Express 2010 调试器中)
注意:如果我先在块外执行try { int result = a[5]; },然后尝试在最后使用cout << result,则程序无法编译。编译器试图帮助我,但我无法尝试异常处理。
【问题讨论】:
-
重点不是真的知道
a[5]是否会成功,而是要为a[x]的失败做好准备(以同样的方式)。如果你没有准备好,你的程序就会结束,因为它没有为你处理它。这当然假设您有一个能够检查的数组类。