C++程序调试时出现“Program received signal SIGSEGV,Segmentation fault.”一般是什么原因,求指导。
是因为指针未初始化或越界,访问到了未分配地址的空间。
#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);
对于不正确的内存处理,计算机程序可能抛出SIGSEGV。操作系统可能使用信号栈向一个处于自然状态的应用程序通告错误,由此,开发者可以使用它来调试程序或处理错误。
在一个程序接收到SIGSEGV时的默认动作是异常终止。这个动作也许会结束进程,但是可能生成一个核心文件以帮助调试,或者执行一些其他特定于某些平台的动作。
你可以用调试程序打开这个 dump 的文件,调试程序会告诉你是哪条指令触发了异常,你可以根据调试信息定位到源程序。