数组不知道哪里越界了
#include <stdio.h>#include <graphics.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
int init(int * p);//初始化数组
int * p=(int *)malloc(sizeof(int)*15*20);
//int * q=(int *)malloc(sizeof(int)*15*20);
char * l=(char *)malloc(sizeof(char)*15*20);
int max_x=0; //屏幕最大宽度
int max_y=0; //屏幕最大高度
int init(int * p);
void draw_shugan(int x1,int y1,int x2,int y2); //画格子
void draw_timberman(int x1,int y1,int x2,int y2,int m); //画伐木工
void jisuan_bomb(int * x,int * y,int i); //计算数组的位置
void draw_shuzhi(int k,int y1,int i); //画树枝
void draw_dark_shuzhi(int k,int y1,int i); //树枝下移
int x0=(640-100)/2;
int main()
{
int f;
int m=0;
int i,j=0,n;
int flag=0;
int x0=0; //程序起始点
int y0=0; //程序起始点
x0=(640-100)/2;
initgraph(640, 480,SHOWCONSOLE);//绘图环境初始化
p[0]=0;
p[1]=0;
p[-1]=0;
init(p);
for(i=0;i<8;i++)
{
draw_shugan(x0,y0,x0+100,y0+60);
y0+=60;
}
for(i=0,n=7;i<8;i++)
{
draw_shuzhi(p[i],30+(-(i%8-n)*60),i);
}
i=8;
j=0;
while(1)
{
m++;
draw_timberman(x0-25,460,x0-5,480,m);
for(f=0,j=flag;f<8;f++)
{
draw_dark_shuzhi(p[j],30+(-((j)%8-n)*60),j);
j++;
}
for(j=flag;j<flag+8;j++)
{
p[j-1]=p[j];
}
flag++;
draw_shuzhi(p[i],30,i);
i++;
printf("i=%d\n",i);
if((m[l]=='a' && p[i-1]==1)||(m[l]=='d' && p[i-1]==2))
break;
}
getch();
closegraph();
//free(p);
return 0;
}
int init(int * p)//初始化数组
{
int i,k;
int m;
for(m=0;m<300;m++)
l[m]=0;
if(p==NULL)
return FALSE;
srand((unsigned)time(NULL));
for(i=2;i<300;i++)
{
k=rand()%3;
p[i]=k;
if((p[i-1]==2 && p[i]==1)||(p[i-1]==1 && p[i]==2))
p[i]=0;
// if((q[i-1]==2 && q[i]==1)||(q[i-1]==1 && q[i]==2))
// q[i]=0;
}
for(i=0;i<300;i++)
printf("%d\n",p[i]);
return TRUE;
}
void draw_shugan(int x1,int y1,int x2,int y2)//画树干
{
int x0=(640-100)/2;
setcolor(WHITE);
rectangle(x1,y1,x2,y2);
setcolor(WHITE);
rectangle(x0-25,460,x0-5,480);
}
void draw_dark_shuzhi(int k,int y1,int i)
{
int x,y;
jisuan_bomb(&x,&y,i);
switch(k)
{
case 0:
break;
case 1:
setcolor(BLACK);
line(235,y1,270,y1);
setcolor(WHITE);
line(235,y1+60,270,y1+60);
break;
case 2:
setcolor(BLACK);
line(370,y1,405,y1);
setcolor(WHITE);
line(370,y1+60,405,y1+60);
break;
}
}
void draw_shuzhi(int k,int y1,int i)
{
int x,y;
jisuan_bomb(&x,&y,i);
switch(k)
{
case 0:
break;
case 1:
setcolor(WHITE);
line(235,y1,270,y1);
break;
case 2:
setcolor(WHITE);
line(370,y1,405,y1);
break;
}
}
void jisuan_bomb(int * x,int * y,int i)//计算数组的位置
{
*x=x0;
*y=i%8*60;
}
void draw_timberman(int x1,int y1,int x2,int y2,int m)
{
int x0=(640-100)/2;
loop:while(kbhit());
l[0]='a';
l[m]=getch();
if(l[m]-l[m-1]==3)
{
setcolor(BLACK);
rectangle(x0-25,460,x0-5,480);
setcolor(WHITE);
rectangle(x1+130,460,x2+130,480);
}
else if(l[m]-l[m-1]==-3)
{
setcolor(BLACK);
rectangle(x1+130,460,x2+130,480);
setcolor(WHITE);
rectangle(x0-25,460,x0-5,480);
}
else if(l[m]-l[m-1]==0)
{
;
}
else
goto loop;
}
只是一个伐木工(timberman)的小游戏,出现了数组越界 ,运行环境是VC6.0装easyx。
求大神赐教