C++程序 显示运行时异常

C++程序 显示运行时异常

C++中,程序运行时可能会遭遇异常,例如除以零、数组越界、空指针引用等等。我们知道,异常的发生会导致程序运行中断,造成不良的影响。因此,本篇文章将针对C++程序运行时异常展开讨论,帮助大家了解一些常见的异常及其处理方式。

常见的异常类型

除以零

当我们在程序中执行除法运算时,如果被除数为0,就会导致除以零的异常发生。以下是一个计算1/n的程序示例:

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    double result = 1.0/n;
    cout << "1/" << n << " = " << result << endl;
    return 0;
}

当我们输入0时,该程序会抛出如下异常信息:

terminate called after throwing an instance of 'std::system_error'
  what():  Operation not permitted
Aborted (core dumped)

数组越界

数组越界就是指我们在访问数组元素时,超出了数组的合法下标范围。以下是一个数组越界的程序示例:

#include<iostream>
using namespace std;

int main(){
    int a[3] = {1,2,3};
    for(int i=0;i<5;i++){
        cout << a[i] << " ";
    }
    return 0;
}

运行以上代码会出现如下异常信息:

Segmentation fault (core dumped)

空指针引用

空指针引用就是指我们在使用未初始化或已被释放的指针时,对指针进行访问操作。以下是一个空指针引用的程序示例:

#include<iostream>
using namespace std;

int main(){
    int* p = NULL;
    *p = 10;
    cout << *p << endl;
    return 0;
}

运行以上代码会出现如下异常信息:

Segmentation fault (core dumped)

异常处理

C++程序提供了异常处理机制,能够帮助我们在程序异常发生时,进行异常的捕获、处理及清理工作。以下是一个try-catch语句的示例:

#include<iostream>
using namespace std;

int main(){
    try{
        int a,b;
        cin >> a >> b;
        if(b == 0){
            throw "Division by zero"; // 抛出异常
        }
        double result = 1.0*a/b;
        cout << a << "/" << b << " = " << result << endl;
    }catch(const char* msg){ // 捕获并处理异常
        cout << "Error: " << msg << endl;
        return -1;
    }
    return 0;
}

在上述示例中,我们使用了throw语句抛出了一个字符串类型的异常,并使用catch语句捕获了该异常,并对其进行处理。例如,在运行该程序时输入0,则会得到如下的异常处理结果:

Error: Division by zero

值得注意的是,C++提供了多种异常处理方式,例如使用try-catch语句、throw语句、try-catch-finally等语句,读者可以根据自己的需求选择不同的方式。

异常安全

在编写程序时,我们不仅需要考虑异常的处理,还需要考虑异常发生时对程序是否正确、完整性的影响,即需要考虑异常安全。以下是一些关于异常安全的建议:

  • 避免使用裸指针,使用智能指针代替。
  • 避免手动内存管理,使用RAII技术代替。
  • 避免泄漏异常,即当异常发生时保证资源能被正常释放,避免产生资源泄漏。
  • 避免修改全局变量和静态变量,让程序的状态尽可能不修改。

异常与性能

由于异常处理会对程序产生一些额外的开销,有时候我们需要权衡使用异常处理的成本。以下是一些关于异常与性能的建议:

  • 异常处理通常比条件判断要慢。所以在某些情况下,可以通过条件判断来代替异常处理,以提高程序的性能。
  • 合理使用异常处理,适时处理异常,并不滥用于程序中的各个细节,可以提高程序的性能。

结论

程序运行时可能会遭遇各种异常,例如除以零、数组越界、空指针引用等等,这些异常会导致程序中断。为了帮助我们处理异常,C++提供了异常处理机制,可以帮助程序员在程序异常发生时,进行异常的捕获、处理及清理工作。除了异常处理,程序员还需要考虑程序的异常安全和程序性能等问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例