在DEV c++5.11下单步调试没有问题,直接运行就内存错误,怎么解决?是一个写了一半的贪吃蛇小游戏。

#include<cstdio>#include<cstdlib>#include<assert.h>#definebud4typedefstructfood{intx;... #include<cstdio>
#include<cstdlib>
#include<assert.h>
#define bud 4

typedef struct food
{
int x;
int y;
}food;
typedef struct snake
{
int x;
int y;
int lenth;
struct snake *next;
}snake;
void creat_food(food* &now,int a[][20]);
void creat_snake(snake *&head,int a[][20]);
void initmap(int a[][20])
{
for(int i=0;i<20;i++)
{
for(int j=0;j<20;j++)
{
a[i][j]=0;
}
}
}
void creatmap_food_snake(snake*&head,food*&now,int a[][20])
{
initmap(a);
assert(a[10][10]==0);
creat_snake(head,a);
creat_food(now,a);
for(int i=0;i<bud;i++)
{
for(int j=0;j<bud;j++)
{
if(i==0||j==0||i==bud-1||j==bud-1)
printf("=");
else if(a[i][j]==1)
printf("#");
else if(a[i][j]==3)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
void creat_food(food* &now,int a[][20])
{
int x,y;
do
{
x=rand()%20;
y=rand()%20;
}while(a[x][y]);

now->x=x;
now->y=y;

a[x][y]=3;

}
void creat_snake(snake *&head,int a[][20])
{
snake*temp=head;
//printf("%d",temp->x);

while(temp)
{
a[temp->x][temp->y]=1;
temp=temp->next;
}
}
void initsnake(snake *&head,int a[][20])
{
head= new snake;
head->x=5;
head->y=5;

head->next=NULL;

}
void free_all(snake*head)
{
snake *temp=head;
while(temp)
{
head=head->next;
free(temp);
temp=head;
}
}
int main(void)
{
int a[20][20];
snake *head;
food *now;
initsnake(head,a);
assert(head->x>=0);
//you xi yunxing
//while(1)
//{
creatmap_food_snake(head,now,a);
//creatsnake();
//creatfood();
//receive_command();
//judgement();//if nextsnake
//system("CLS");
//}
free_all(head);

}
展开
 我来答
百度网友7eff2e0
2016-05-01 · TA获得超过1043个赞
知道小有建树答主
回答量:787
采纳率:80%
帮助的人:543万
展开全部
这种情况一般是因为你单步调试没到或到不了错误的地方。
你可以在调试状态下直接运行,出错时看看调试器给出的错误位置(函数调用栈)

最笨的方法就是插入无聊语句到可能出错的位置,然后设断点在这些语句上。(这些语句可以是printf(变量) )
追问
我是单步整个程序走完了也不会出错,直接运行就说有块内存不能read
追答
不要有“迷信”。按我说的试试。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式