Runtime Error (ACCESS_VIOLATION)是什么错误啊?求大神帮助啊!

淡定的小Y 2012-09-03 09:41:48
hdoj1107

#include<iostream>
using namespace std;
int a[13][13][1000],ma[3],jilu,n;
struct fun
{
char name;
int x,y;
int neili,wuyi,shengmingli;
int direction;//0的话为最还是得方向
}t[1000];
int fun1(int i)//参数为t结构体的下标
{
float q;
q=(0.5*t[i].neili+0.5*t[i].wuyi)*(t[i].shengmingli+10)*1.0/100;
return static_cast<int>(q);
}
int fun2(int i)
{
float q;
q=(0.8*t[i].neili+0.2*t[i].wuyi)*(t[i].shengmingli+10)*1.0/100;
return static_cast<int>(q);
}
int fun3(int i)
{
float q;
q=(0.2*t[i].neili+0.2*t[i].wuyi)*(t[i].shengmingli+10)*1.0/100;
return static_cast<int>(q);
}
void zhandou()
{ for(int i=1;i<=12;i++)
{
for(int j=1;j<=12;j++)
{
if((a[i][j][0]==2)&&(t[a[i][j][1]].name!=t[a[i][j][2]].name)&&t[a[i][j][1]].shengmingli>0&&t[a[i][j][2]].shengmingli>0)//判断是两个人并且是是不同派的
{
for(int k=1;k<=2;k++)
{
if(t[a[i][j][k]].name=='S')//分别算出攻击力
ma[k]=fun1(a[i][j][k]);//返回的是攻击力
if(t[a[i][j][k]].name=='W')
ma[k]=fun2(a[i][j][k]);
if(t[a[i][j][k]].name=='E')
ma[k]=fun3(a[i][j][k]);
}
t[a[i][j][1]].shengmingli-=ma[2];//算出战斗后的生命力的
t[a[i][j][2]].shengmingli-=ma[1];
}
}
}
}
void funs(int i)
{
int m;
m=t[i].x;
if(t[i].direction==0)//判读向下走
{
if(t[i].x<12)
{
a[t[i].x][t[i].y][0]--;
t[i].x++;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=1;
a[t[i].x][t[i].y][0]--;
t[i].x--;
a[t[i].x][t[i].y][0]++;
}
}
else
{
if(t[i].x>1)
{
a[t[i].x][t[i].y][0]--;
t[i].x--;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=0;
a[t[i].x][t[i].y][0]--;
t[i].x++;
a[t[i].x][t[i].y][0]++;
}
}
int k=1;
int w=1;
while(a[t[i].x][t[i].y][w]!=0)
w++;
while(a[m][t[i].y][k]!=0)
{

a[t[i].x][t[i].y][w]=a[m][t[i].y][k];
a[m][t[i].y][k]=0;
k++;
w++;
}
}
void funw(int i)
{
int m=t[i].y;
if(t[i].direction==0)
{
if(t[i].y<12)
{
a[t[i].x][t[i].y][0]--;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=1;
a[t[i].x][t[i].y][0]--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
}
else
{
if(t[i].y>1)
{
a[t[i].x][t[i].y][0]--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=0;
a[t[i].x][t[i].y][0]--;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
}
int k=1;
int w=1;
while(a[t[i].x][t[i].y][w]!=0)
w++;
while(a[t[i].x][m][k]!=0)
{
a[t[i].x][t[i].y][w]=a[t[i].x][m][k];
a[t[i].x][m][k]=0;
k++;
w++;
}
}
void fune(int i)
{
int m1=t[i].x,m2=t[i].y;
if(t[i].direction==0)
{
if((t[i].x<12)&&(t[i].y)<12)
{
a[t[i].x][t[i].y][0]--;
t[i].x++;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
else if((t[i].x>1)&&(t[i].y>1))
{
t[i].direction=1;
a[t[i].x][t[i].y][0]--;
t[i].x--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
}
else
{
if((t[i].x>1)&&(t[i].y>1))
{
a[t[i].x][t[i].y][0]--;
t[i].x--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
else if((t[i].x<12)&&(t[i].y)<12)
{
t[i].direction=0;
a[t[i].x][t[i].y][0]--;
t[i].x++;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
}
int k=1;
int w=1;
while(a[t[i].x][t[i].y][w]!=0)
w++;
while(a[m1][m2][k]!=0)
{
a[t[i].x][t[i].y][w]=a[m1][m2][k];
a[m1][m2][k]=0;
k++;
w++;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
jilu=0;//记录t结构体的下标
cin>>n;
memset(a,0,sizeof(a));
int i=1;
while(cin>>t[i].name)//对数据进行输入
{
if(t[i].name=='0')
break;
jilu++;//记录人数的
cin>>t[i].x>>t[i].y>>t[i].neili>>t[i].wuyi>>t[i].shengmingli;
a[t[i].x][t[i].y][0]++;//记录所在的坐标
t[i].direction=0;//记录方向
int k=1;//记录本人的信息是在某个坐标记录的
while(a[t[i].x][t[i].y][k]!=0)
k++;
a[t[i].x][t[i].y][k]=i;
i++;
}

for(int l=1;l<=n;l++)//每次走一步的
{
zhandou();//将战斗进行一次
for(i=1;i<=jilu;i++)//分别让他们走路的
{
if(t[i].shengmingli<=0)
continue;
if(t[i].name=='S')//提供的是结构体的下标
funs(i);//走路的函数
if(t[i].name=='W')
funw(i);
if(t[i].name=='E')
fune(i);

}
}
int max1=0,max2=0,max3=0,max4=0,max5=0,max6=0;
for(i=1;i<=jilu;i++)
{
if(t[i].name=='S'&&t[i].shengmingli>0)
{
max1++;
max2+=t[i].shengmingli;
continue;
}
if(t[i].name=='W'&&t[i].shengmingli>0)
{
max3++;
max4+=t[i].shengmingli;
continue;
}
if(t[i].name=='E'&&t[i].shengmingli>0)
{
max5++;
max6+=t[i].shengmingli;
continue;
}
}
cout<<max1<<" "<<max2<<endl;
cout<<max3<<" "<<max4<<endl;
cout<<max5<<" "<<max6<<endl;
cout<<"***"<<endl;
}
return 0;
}
...全文
732 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmu_才盛 2012-09-04
  • 打赏
  • 举报
回复
太长了, 而且还没有格式,, 看不下去了
kobefly 2012-09-04
  • 打赏
  • 举报
回复
理论上来说, 可能你的代码访问非法地址了
Corner 2012-09-04
  • 打赏
  • 举报
回复
单步调试就知道哪里有问题了……
赵4老师 2012-09-04
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
淡定的小Y 2012-09-04
  • 打赏
  • 举报
回复
可是对hdoj上面给的数据我测试的时候是对的,但是一提交上去就变成那个错误了!

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧