c语言写贪吃蛇的问题

为当前最终发行版之前的所有版本提供支持
回复
hanis_ghost
帖子: 41
注册时间: 2015-06-19 21:16
送出感谢: 25 次
接收感谢: 0

c语言写贪吃蛇的问题

#1

帖子 hanis_ghost » 2017-10-10 18:41

想用ncurses写个c语言贪吃蛇,思路如下:
初始化 -> 接受用户输入,确定前进方向 -> 处理 ->输出
已经写完第二步了,编译链接成功,但./a.out后 显示:Segmentation fault (core dumped)
咋回事?哪里有错么?
另外下面怎么写请给些建议,谢谢。

代码: 全选

#include<stdio.h>
#include<ncurses.h>
#include<stdlib.h>
#include<time.h>

struct snake		//蛇的每一个节点都是个struct
{
	int y;int x;       //y:哪行 x:哪列
	struct snake* next;
};
struct snake* snake_head;
struct snake* dot;
int dir;	//蛇前进的方向 1:左 2:上 3:右 4:下

void main()
{
	//initialization
	int space[42][62]={0};	//游戏平台为42*62的平面
	int i,j,c;
	for(i=0,j=41,c=0;c<62;c++);
		space[i][c]=space[j][c]=3;    //3代表边框
	for(c=0,j=61,i=1;i<41;i++)
		space[i][c]=space[i][j]=3;	  //这两个for画出边框
	    //接下来初始化蛇的位置:从(3,4)到(3,5),刚开始时头在(3,5)
	    //注:上行注释括号中数字是数组下标。蛇的活动范围是40*60的长方形
	snake_head->y=3;
	snake_head->x=5;
	dot=malloc(sizeof(struct snake));
	dot->y=3;
	dot->x=4;
	snake_head->next=dot;
	dot->next=NULL;
	dir=3;
	initscr();
	WINDOW* win=newwin(42,62,0,0);
	keypad(win,TRUE);  //允许使用方向键
	noecho();
	curs_set(0);
	srand(time(NULL));
	halfdelay(5);
	//初始化完成,蛇头在(3,5),蛇身仅有一点(3,4)
	//初始前进方向是右

	while(1)
	{
		//input
		setbuf(stdin,NULL);  //清空输入缓冲区 
		int ch=wgetch(win);
		if(ch==KEY_UP)
			dir=2;
		else if(ch==KEY_DOWN)
			dir=4;
		else if(ch==KEY_LEFT)
			dir=1;
		else if(ch==KEY_RIGHT)
			dir=3;
		//至此,蛇前进的方向确定了!

		//process  //这步在wrefresh()之前刷新蛇的位置
		
		//output   //输出整个2维空间,不用多说
		
	}
	endwin();
}
头像
astolia
论坛版主
帖子: 3296
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 553 次

Re: c语言写贪吃蛇的问题

#2

帖子 astolia » 2017-10-10 20:00

你学了这么久了连基本的调试都不会?嫌gdb指令晦涩,就用它的图形前端啊,一跑就知道哪里出问题了

Segmentation fault基本都是指针的问题,你这个程序也不例外。
snake_head你初始化了吗?拿着个野指针就开始用,你也不是第一次犯这个错了吧?

另外,编程问题发到编程板去
头像
qgymib
帖子: 539
注册时间: 2010-04-02 16:44
系统: openSUSE 13.2 x64
送出感谢: 2 次
接收感谢: 9 次

Re: c语言写贪吃蛇的问题

#3

帖子 qgymib » 2017-10-12 17:25

ls +1

P.S. 除此之外用valgrind跑一跑,直接给你定位到有问题的行号
这些用户感谢了作者 qgymib 于这个帖子:
hanis_ghost (2017-10-13 11:12)
评价: 3.7%
正在建设中的个人博客
回复

回到 “老旧版本支持”