Debug:Program received signal SIGSEGV,Segmentation fault.

错误描述

最近在用Dev-C++编写程序时,程序能够编译运行,奈何本该接收键盘输入数据的程序,运行之后直接显示“请按任意键继续…”字样结束运行了。调试后发现了报错信息“Program received signal SIGSEGV,Segmentation fault.

  • 错误信息
    错误信息
  • 程序运行截图
    Dev-C++
    刚开始我以为是编译器的问题,更换了VC++6.0之后错误依然存在。
    VC++6.0

出错原因

SIGSEGV是当一个进程执行了一个无效的内存引用,或发生段错误时由操作系统抛出的异常。

查阅了部分相关的文章和进行多次尝试后,总结出可能的出错原因如下:
1、指针未初始化

#include<stdio.h>
int main(){
	char *a;
	printf("%s",a);
	return 0;
}

2、数组未被初始化,数组下标越界,数组元素不存在等

#include <stdio.h>
int main(){
char test[1];
printf("%c", test[10000]);
return 0;
}

3、使用printf输出变量时变量格式控制不合理
例如:试图把int型的变量a以%s的格式输出

#include<stdio.h>
int main(){
	int a=1;
	printf("%s",a);
	return 0;
}

4、定义在main函数中的二维数组过大

#include<iostream>
using namespace std;
int main(){
	int a[1000][1000];
	int N,M;
	cin>>N>>M;
	for(int i=0;i<N;i++)
		for(int j=0;j<M;j++)
			cin>>a[i][j];
	cout<<a[0][0];
} 

排查过后,发现自己是在main里面定义了过大的二维数组才导致了错误>﹏<。

解决方法

针对可能导致SIGSEGV的四种原因可分别采用以下的解决方法:
1、指针、数组未初始化>>>初始化指针、数组
2、数组下标越界、数组元素不存在>>>检查数组下标,禁止数组越界,给不存在的数组元素赋值
3、使用printf输出变量时变量格式控制不合理>>>规范输出变量格式(%d%s%d)
4、在main函数中定义了过大的二维数组>>>将数组的定义移至main函数之前

另外,经过尝试之后,还发现main函数中定义的最大二维数组为[720][720]。
所以也就意味着,
如果要定义比这更大的二维数组就要在main函数外面定义啦!!

参考文章

Program received signal SIGSEGV, Segmentation fault.段错误调试
https://blog.csdn.net/oriel123/article/details/77715620

  • 16
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值