Devc++调试中出现Program received signal SIGSEGV,Segmentation fault原因及解决办法

本文介绍了如何解决程序运行时出现的Segmentation Fault错误,该错误通常由于无效指针引用或内存访问引起。通过分析示例代码中的Read_File函数,发现错误在于循环中未重新初始化指针。修复方法是将指针初始化移到循环内部,确保每次循环开始时指针都正确设置。此外,还讨论了scanf函数使用不当可能导致的类似问题。
摘要由CSDN通过智能技术生成

 

程序不能正确输出结果或者程序无法运行
在调试的时候系统提示
系统提示报错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);
  }

  • 18
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值