C ++程序崩溃的原因

C ++程序的异常行为通常会导致程序崩溃。您可能遇到了分段错误,异常终止,浮点异常等问题。以下是一些示例程序,可以帮助您了解C ++程序崩溃的原因。

异常

C ++中的异常是程序遇到异常情况时的响应。如果使用try-catch块无法正确处理这些异常,则该程序将由于崩溃而崩溃。由于除零异常导致以下程序崩溃-

示例

#include <iostream>

int main(){

   int num1=10;

   int num2=0;

   int quotient=num1/num2;

   printf("\n Quotient is: %d",quotient);

   return 0;

}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Floating point exception (core dumped)

缓冲区溢出

缓冲区是一个临时存储区。当将数据写入缓冲区的程序超出缓冲区可以容纳的大小时,多余的数据将超出缓冲区的边界。数据将覆盖相邻的存储位置。当输入超出大小时,以下程序将更改其行为,变量num可以保存。

示例

#include <iostream>

#include <string.h>

int main(){

   int num=100;

   std::cout<<"\nValue for num:"<<num;

   char c[2];

   strcpy(c,"abcdefghijklmnopqrstuvwxyz");

   std::cout<<"\nValue for c:"<<c;

   return 0;

}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Value for num:100

Segmentation fault (core dumped)

堆栈溢出

当调用堆栈指针超出堆栈界限时,将发生堆栈溢出问题。堆栈包含有限的空间。当程序使用的空间超过堆栈上的可用空间时,则表示堆栈溢出并导致程序崩溃。最常见的原因是无限递归。

以下程序包含对function的无限调用factorial()。在这种情况下,return语句不合适。

示例

#include <iostream>

#include <string.h>

int factorial(int num){

   if(num==0)

      return 1;

   else

      return(factorial(num));

}

int main(){

   int n=10;

   int fact=factorial(n);

   std::cout<<fact;

}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Segmentation fault (core dumped)

内存区段错误

当程序尝试访问不属于它的内存位置时,就会发生分段错误或核心转储。在下面的程序中,指针str正在无限地递增和追加内存。

示例

#include <iostream>

int main(){

   char *str;

   char name[]="iostream";

   str=name;

   while(1)

      (*str++)='a';

}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Segmentation fault (core dumped)

内存泄漏

当动态分配的内存从未释放时,就会发生内存泄漏。当不再使用内存时,必须释放它。如果我们连续不断地分配内存,那么随着时间的流逝,这些内存泄漏将会增加,并最终导致程序崩溃。如下所示重复不良代码会导致内存泄漏-

示例

#include <iostream>

int main(){

   int *node;

   node = (int *) malloc(9999999);

   //免费(节点); 

}

以上是 C ++程序崩溃的原因 的全部内容, 来源链接: utcz.com/z/321516.html

回到顶部