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:100Segmentation 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