我的C++程序调试时出现“Program received signal SIGSEGV,Segmentation fault.”是什么原因,求指导。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-08
C程序调试时出现Program received signal SIGSEGV, Segmentation fault?

目测错误 scanf("%d",hi[i]); -》 scanf("%d",&hi[i]);

这是HEAD一个指针,赋值为0,没有任何指向,如下:
#include
int main()
{
int i=0;
int n=1;
printf("请输入一个正数字
");
scanf("%d",i);
while(i>1)
{
n=i*n;
i=i-1;
}
printf("n!=%d",n);
return 0;
}

你的程序是运行在linux上的吧?


1:错误信息的意思是收到一个信号,名字为段错误(信号值是11,程序收到这个信号的默认处理是退出),我看你应该是刚开始写程序不久,这个信号相信会一直陪伴着你的编程生涯,是程序运行最常见的错误之一。

2:这个信号产生的机制是由于程序试图访问他并没有权限访问的内存。操作系统为每个程序分配内存的时候都指定了访问权限,程序只能访问自己有权访问的内存。而软件导致这个信号产生的原因,一般情况下是内存越界访问,比如数组越界访问,线程栈溢出等等。

3:你的程序产生这个信号的原因本质也是越界

long s1[1000][1000]={0},s2[1000][1000]={0};

一个long类型是8字节,S1的大小是8000000字节也就是8MB,S1和S2加起来16MB,这2个变量都是局部变量,也就是栈变量,分配在内存的栈区。而linux默认一个程序的线程栈最大是10MB,所以越界了,把S1和S2改小点,比如改成S1[100][100],就可以正常运行了。

4:当然你也可以改linux的线程栈最大值,查下ulimit命令就可以了。或者用malloc将这2个变量动态分配在内存堆区上,堆区一般没限制大小。



long s1[1000][1000]={0},s2[1000][1000]={0};

这句话放在main函数外面当成全局变量就好了。不要在函数里开这么大的内存。

另外

s2[i][j]<2147483648

非常不建议这么写……鬼知道编译器能不能自动转换这个数到long int

要不然改成

s2[i][j]<2147483648ll

要不改成

s2[i][j]<=2147483647


  • 三菱c251报prog
    答:主要是PLC编写的程序出错原因造成,出错有的可能是逻辑错误,也有可能是输入错误。出现这种问题需要检查清楚。
  • ...在做c语言上机模拟时,不管填什么答案,老出现prog1.obj - 1 error...
    答:C++编译软件不能识别中文状态下的括号()、分号;、逗号, 会出现语法错误,能够识别中文状态下的大括号{}、加+、减-、乘*、除/、>大于、<小于,?、:等,不会出现语法错误,也就是说中文与英文状态下一样。当运行程序时就会出现类似unknown character '0xa3'错误信息。解决方法:单击工具栏中的...
  • c++运行出现prog1.c(13) : error C2088: '<' : illegal for struct...
    答:13行:你自己定义的结构体不能直接比较,因为你没有定义相应的<操作该如何实现
  • c语言中为什么出现d:\debug\prog1.exe this file does not exist.do...
    答:我用vc调试,有以下问题 1,countValue中,cos()的返回值是double,编译器无法自动将其转换为float 2,楼主的main()前面也有子函数定义,后面也有子函数定义。个人觉得这个习惯不好。3,main中少return,然后程序就可以运行了。
  • fanuc数控车床prog是什么意思
    答:prog是Program Key的缩写,意思是程序键。数控系统通过显示装置为操作人员提供必要的信息。根据系统所处的状态和操作命令的不同,显示的信息可以是正在编辑的程序、正在运行的程序、机床的加工状态、机床坐标轴的指令/实际坐标值、加工轨迹的图形仿真、故障报警信号等。较简单的显示装备只有若干个数码管,只能...
  • 二级C上机编程题中出现 “cannot open Debug/prog1.exe for writing...
    答:是不是你编译的时候还运行着上次编译通过的程序?就是说你刚刚执行的程序窗口还没关掉就再次点了编译,这样计算机是不能生成EXE文件的,因为EXE正在运行,所以它cannot writing。希望对你有帮助。
  • c:\prog...r6030-CRT not initialized是什么意思?出现这个情况怎么解 ...
    答:1、是安装vc的解决方案。2、如果没有这个程序的运行时间,那里是c:\ program files \ stormii \ stormlic.exe的开机启动项,禁止其启动方法:打开“开始” - 然后单击“运行” - 输入:输入msconfig - 点。1、prog r6030-CRT not initialized。2、r6030 CRT没有初始化程序。3、prog r6030-CRT...
  • 在电脑起动时出现加载"c:PROG\3721dll时出错,找不到指定的模块”是什么...
    答:1、开始——运行——msconfig——启动——把加载项***.dll的那个勾勾去掉。 重启电脑,通常到这就可以了,如果还弹出来再进行第二步 2、开始——运行——regedit 在下面的位置删除相应键值: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows...
  • C语言问题
    答:这是c语言三级上机考试中的原题,部分源程序存在progg.c中是指在考试系统中有考生文件,上面存有一部分程序,但还缺少一部分,这就是考试中需要人填上的。如果你想要答案,我建议你去书店找一本三级网络上机操作的书,书上第二题就是。我以前考过的。
  • 送下C56 PLC电池没电,在"run"位置"run"灯不亮,"PROG""ERR"灯都亮,无法...
    答:松下FP1-C56 PLC在失电的情况下,其程序会丢失,RUN灯不会亮,且PROG及ERR灯同时亮,哪怕强制为RUN,RUN灯闪亮下后立刻PROG及ERR灯一起亮,后来自己制作一条简易的RS422下载线后,进入PLC通信成功,但遗憾的是,因为失电,程序全部丢失,没有办法,自己编程解决才解决问题。网络上的所谓2-2 3-3 ...