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

C++程序调试时出现“ProgramreceivedsignalSIGSEGV,Segmentationfault.”一般是什么原因,求指导。... C++程序调试时出现“Program received signal SIGSEGV,Segmentation fault.”一般是什么原因,求指导。 展开
 我来答
爱教育爱学习
高粉答主

2019-10-22 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112732

向TA提问 私信TA
展开全部

是因为指针未初始化或越界,访问到了未分配地址的空间。

#include<iostream>

usingnamespacestd;

intmain(){

intiYear,iMonth,iDay,iDays;boolbFlag=true;

cout<<"请输入日期(年/月/日):"<<endl;

scanf("%4d/%2d/%2d",&iYear,&iMonth,&iDay);

switch(iMonth)

{

case1:;

case3:;

case5:;

case7:;

case8:;

case10:;

case12:iDays=31;break;

case4:;

case6:;

case9:;

case11:iDays=30;break;

case2:if((iYear%4==0)&&(iYear%100!=0)||(iYear%400==0))iDays=29;

elseiDays=28;break;

default:bFlag=false;

}

if(bFlag)

cout<<"此日期对应月的天数是:"<<iDays<<endl;

else

cout<<"输出错误:"<<endl;

system("pause");

}

扩展资料

未初始化的内存

如:p已被分配了10个字节。这10个字节可能包含垃圾数据。

char*p=malloc(10);

垃圾数据

如果在对这个p赋值前,某个代码段尝试访问它,则可能会获得垃圾值,您的程序可能具有不可预测的行为。p可能具有您的程序从未曾预料到的值。

结合使用memset和malloc,或者使用calloc。

char*p=malloc(10);

memset(p,’’,10);

百度网友8d0c803
推荐于2017-10-03 · 超过20用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:43.7万
展开全部
程序里执行了无效的内存引用。

对于不正确的内存处理,计算机程序可能抛出SIGSEGV。操作系统可能使用信号栈向一个处于自然状态的应用程序通告错误,由此,开发者可以使用它来调试程序或处理错误。
  在一个程序接收到SIGSEGV时的默认动作是异常终止。这个动作也许会结束进程,但是可能生成一个核心文件以帮助调试,或者执行一些其他特定于某些平台的动作。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
john_lee1969
2014-06-29 · TA获得超过1700个赞
知道小有建树答主
回答量:419
采纳率:100%
帮助的人:527万
展开全部
指针未初始化或越界,访问到未分配地址空间,触发了硬件的一般性访问异常,内核捕捉到异常后,会把你的运行环境 dump 到一个文件中,然后结束该进程。
你可以用调试程序打开这个 dump 的文件,调试程序会告诉你是哪条指令触发了异常,你可以根据调试信息定位到源程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
傲鹰11
2018-10-31
知道答主
回答量:2
采纳率:0%
帮助的人:1447
展开全部
scanf没加&时会出现这种情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友48eb3ef38
2019-08-12
知道答主
回答量:1
采纳率:0%
帮助的人:711
展开全部
数组越界;
除0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式