为什么不能捕获c ++异常

时间:2014-08-25 08:10:35

标签: c++ exception crash

如果我在c ++中编写代码并抛出异常,我也可以捕获这些异常。例如;

int divide(int divison, int dividor)
{
    if (dividor == 0)
        throw DivideByZeroException();
    return divison / dividor;
}
void main()
{
    int a = 10,b=0;
    try
    {
        result = divide(a, b);
        cout << "result : " << result << endl;
    }
    catch (exception & e)
    {
        cout <<  e.what() << endl;
    }   
    cout << "Enter a key to exit" << endl;
    cin.get();
}

但是,如果我尝试直接捕获相同的异常程序崩溃。例如

void main()
{
    int a = 10,b=0;
    try
    {
        result = a / b;
        cout << "result : " << result << endl;
    }
    catch (exception & e)
    {
        cout << "Normal exception :" << e.what() << endl;
    }
    cout << "Enter a key to exit" << endl;
    cin.get();
}

为什么会发生这种情况,有没有办法在c ++中发生错误时停止程序崩溃?

1 个答案:

答案 0 :(得分:2)

在C ++中,除以0不会产生异常:行为未定义(在许多操作系统上,内核会向程序发送信号,如果你不抓住它,程序终止)。

C ++标准,第5/4节

  

如果在评估表达式期间,结果未在数学上定义或未在其类型的可表示值范围内,则行为未定义。

您可以(应该)在进行分组之前检查您的输入:语言不会为您完成。 (某些数字库封装基本类型,重载运算符,并抛出异常)