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

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

程序运行时发生运行时错误。由于这不是编译错误,因此编译将成功完成。在这里,我们将学习如何在C++中处理运行时异常。

这里讨论5种类型的运行时异常:

  1. 除以零。
  2. 段错误。
  3. 大内存分配/大静态内存分配。
  4. 类型限定符错误。
  5. 运行时无效内存访问。

让我们开始逐个讨论这些运行时错误。

1. 除以零

当我们将整数值除以零时,就会出现这种类型的错误,称为除以零错误。它也称为浮点异常(SIGFPE)。下面是演示除以零异常的C++程序:

// C++程序演示 
//除以零异常
#include <iostream>
using namespace std;
  
// 主方法
int main() 
{
    int a = 10; 
    int res = a / 0; 
    cout << res;
    return 0;
}  

输出:

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

2. 段错误

在下面的代码中,行*(str+1)=’n’试图写入只读内存。下面是演示段错误的C++程序:

// C++程序演示 
//段错误
#include <iostream>
using namespace std;
  
// 主方法
int main()
{
  char *str;
    
  // 存储在只读内存部分中 
  // 的数据段 
  str = "GeeksforGeeks";    
    
  // 试图修改只读 
  // 内存
  *(str + 1) = 'n';
  return 0;
}  

输出:

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

3. 大内存分配/大静态内存分配

通常,任何编译器或任何语言都会接受10^8以下的数值。但是为了安全起见,我们通常使用10^7以下的数值。在下面的代码中,数组的大小超过了10^8,因此我们由于大内存分配而出现错误。它也被称为中止信号(SIGABRT)。

下面是演示大内存分配运行时异常的C++程序:

// C++程序演示 
//大内存分配运行时异常
#include <iostream>
using namespace std;
  
// 主方法
int main() 
{
  int a = 100000000000; 
  int * arr = new int[a];
  return 0;
}  

输出:

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

4. 类型指示符错误

以下代码会产生运行时错误,因为变量“a”被定义为long long int,但在scanf中使用的格式指示符是 %d,这会导致错误。

下面是演示类型指示符错误的C++程序:

// C++程序,演示 
// 类型指示符错误
#include <iostream>
using namespace std;
  
// 主函数
int main() 
{
    long long int a; 
    scanf("%d", &a);
    return 0;
}  

输出:

prog.cpp: 在函数‘int main()’中:

prog.cpp:10:19: 警告:格式‘%d’要求类型为‘int’的参数,但是参数2的类型为‘long long int’[-Wformat=]

scanf(“%d”,&a);

5. 运行时的无效内存访问

在下面的代码中,数组被分配了一个负索引值,这将导致无效内存访问。它将给出一个垃圾值。下面是演示运行时无效内存访问的C++程序:

// C++程序,演示 
// 运行时的无效内存访问
#include <iostream>
using namespace std;
  
int arr[5];
  
// 主函数
int main() 
{
  int a = arr[-10];
  cout << a;
  return 0;
}  

输出

281923776

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例