程序不能正确输出结果或者程序无法运行
在调试的时候系统提示
系统提示报错Program received signal SIGSEGV,Segmentation fault
SIGSEGV是是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。
意思是程序接受一个无效的指针地址,Segmentation fault即是提示我们去注意定义指针的符号。
例如scanf函数中没有添加&,调试时也会出现此错误
Program received signal SIGSEGV Segmentation fault错误的主要原因是指针和数组的原因,以及需要开辟内存的操作,该错误往往是无法访问内存。
在这次错误中是在循环中没有重新初始化指针,后将代码中的指针初始化放到循环中就解决了问题
void Read_File(struct Card*wDeck) //读出数据
{
FILE *pfr=fopen("C:\\Users\\ASUS\\Desktop\\计算机作业\\扑克牌游戏\\存储.txt","rb+");
if(pfr==NULL)
{
printf("打开失败");
exit(0);
}
Card *pointer;
int m,i;
char flag='y';
do
{
pointer=wDeck;
fread(pointer,sizeof(Card),52,pfr);
fflush(stdin); //清空缓冲区
printf("请输入你想查看第几副牌:");
scanf("%d",&m);
if(m!=1&&m!=2&&m!=3&&m!=4)
{
printf("请输入正确数字!");
continue;
}
switch(m)
{
case 1:pointer=pointer+0;break;
case 2:pointer=pointer+13;break;
case 3:pointer=pointer+26;break;
case 4:pointer=pointer+39;break;
}
for(i=0; i<13 ;i++)
printf("%c%s\t",pointer[i].color,pointer[i].number);
printf("是否查看其它的牌(y/n):");
fflush(stdin); //清空缓冲区
scanf("%c",&flag);
}while(flag=='y');
fclose(pfr);
}