c++程序Ox0000005,Access Violation
来的哥哥都受小弟一拜,下面这段程序出现Unhandled exception inXXX:0x0000005:Access Violation#include <string>。哥哥程序里面蓝色的部分不用看 就是不断给出一个浮点数m,我想不断将m存入float B[2001][30]中,所以大家直接看红色部分就好了。我发现再屏蔽掉i++这命令时候没问题,我保证没啥语法错误,跪谢啊
您的帮助可能让我这个苦逼不在苦逼!
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <math.h>
#include <cmath>
using namespace std;
float B[2001][30];
double d=3.1750; //截断距离
int i=1;
//注:C++规定,数组定义为全局变量或静态变量时,其所有元素的初值都为0;
void f1(float b[][3],int d2, float x1, float x2,float y2, float z3)
{
float t,m,tem;
int y=1,i=1;
float minr1,minr2,minr3,minr4,minr5,minr6,minr7,minr8,minr9,minr10,minr11,minr12,minr13,minr14,minr15;
float minr[28];
for(int a=1; a<d2; a++)
{
int n=0;
for(int c=1; c<d2; c++)
{
if(c!=a)
{
minr1=b[a][0]-b[c][0]; //与c原子的x坐标之差
minr2=b[a][1]-b[c][1]; //与c原子的y坐标之差
minr3=b[a][2]-b[c][2]; //与c原子的z坐标之差
minr4=b[a][0]-b[c][0]+x1; //与c原子左方的像c2的x坐标之差
minr5=b[a][0]-b[c][0]-x1; //与c原子右方的像c1的x坐标之差
minr6=b[a][1]-b[c][1]+y2; //与c原子下方的像c4的y坐标之差
minr7=b[a][1]-b[c][1]-y2; //与c原子上方的像c3的y坐标之差
minr8=b[a][1]-b[c][1]+x2; //与c原子左方c2的像的y坐标之差
minr9=b[a][1]-b[c][1]-x2; //与c原子右方c1的像的y坐标之差
minr10=b[a][1]-b[c][1]+x2-y2; //与c原子左上方的像c5的y坐标之差
minr11=b[a][1]-b[c][1]+x2+y2; //与c原子左下方的像c6的y坐标之差
minr12=b[a][1]-b[c][1]-x2+y2; //与c原子右下方的像c8的y坐标之差
minr13=b[a][1]-b[c][1]-x2-y2; //与c原子右上方的像c7的y坐标之差
minr14=b[a][2]-b[c][2]-z3; //与c原子上层的像的Z坐标之差
minr15=b[a][2]-b[c][2]+z3; //与c原子下层的像的Z坐标之差
minr[1]=pow(minr1,2)+pow(minr2,2)+pow(minr3,2);
minr[2]=pow(minr1,2)+pow(minr6,2)+pow(minr3,2); // 与下面c4的像的距离
minr[3]=pow(minr1,2)+pow(minr7,2)+pow(minr3,2); // 与上面c3的像的距离
minr[4]=pow(minr4,2)+pow(minr8,2)+pow(minr3,2); // 与左面的像c2的距离
minr[6]=pow(minr4,2)+pow(minr10,2)+pow(minr3,2); // 与左上面的像c5的距离
minr[7]=pow(minr4,2)+pow(minr11,2)+pow(minr3,2); // 与左下面的像c6的距离
minr[5]=pow(minr5,2)+pow(minr9,2)+pow(minr3,2); // 与右面的像c1的距离
minr[8]=pow(minr5,2)+pow(minr12,2)+pow(minr3,2); // 与右下面的像c8的距离
minr[9]=pow(minr5,2)+pow(minr13,2)+pow(minr3,2); // 与右上面的像c7的距离
minr[10]=pow(minr1,2)+pow(minr2,2)+pow(minr14,2);
minr[11]=pow(minr1,2)+pow(minr6,2)+pow(minr14,2); // 与下面c4的像的距离
minr[12]=pow(minr1,2)+pow(minr7,2)+pow(minr14,2); // 与上面c3的像的距离
minr[13]=pow(minr4,2)+pow(minr8,2)+pow(minr14,2); // 与左面的像c2的距离
minr[14]=pow(minr4,2)+pow(minr10,2)+pow(minr14,2); // 与左上面的像c5的距离
minr[15]=pow(minr4,2)+pow(minr11,2)+pow(minr14,2); // 与左下面的像c6的距离
minr[16]=pow(minr5,2)+pow(minr9,2)+pow(minr14,2); // 与右面的像c1的距离
minr[17]=pow(minr5,2)+pow(minr12,2)+pow(minr14,2); // 与右下面的像c8的距离
minr[18]=pow(minr5,2)+pow(minr13,2)+pow(minr14,2); // 与右上面的像c7的距离
minr[19]=pow(minr1,2)+pow(minr2,2)+pow(minr15,2);
minr[20]=pow(minr1,2)+pow(minr6,2)+pow(minr15,2); // 与下面c4的像的距离
minr[21]=pow(minr1,2)+pow(minr7,2)+pow(minr15,2); // 与上面c3的像的距离
minr[22]=pow(minr4,2)+pow(minr8,2)+pow(minr15,2); // 与左面的像c2的距离
minr[23]=pow(minr4,2)+pow(minr10,2)+pow(minr15,2); // 与左上面的像c5的距离
minr[24]=pow(minr4,2)+pow(minr11,2)+pow(minr15,2); // 与左下面的像c6的距离
minr[25]=pow(minr5,2)+pow(minr9,2)+pow(minr15,2); // 与右面的像c1的距离
minr[26]=pow(minr5,2)+pow(minr12,2)+pow(minr15,2); // 与右下面的像c8的距离
minr[27]=pow(minr5,2)+pow(minr13,2)+pow(minr15,2); // 与右上面的像c7的距离
t=minr[1];
for(int p=1;p<27;p++)
{
if(t>=minr[p+1])
t=minr[p+1];
}
m=sqrt(t);
[i]B[a]=m;
i++;
}
} //c循环for语句的下标大括号
for (int i2=1;i2<30;i2++)
{
for (int j=i2+1;j<30;j++)
{
if (B[a][j]<B[a][i2])
{
tem=B[a][i2];B[a][i2]=B[a][j];B[a][j]=tem;
}
}
} //B[2001][30]由小到大排序,B[2001][12]前面为最近的十二个原子距离
} //此大括号为中心原子a循环的for语句下标
} //函数f1功能,判定两两成键的原子,并把满足界面原子要求的中心原子序号存入数组 s[y];
int main(void)
{ float A[2001][12];
float x,y,z,v1,v2,v3;
float a[2001][3];
float b1,b2;
float d1,d3,d4,d5;
int d2;
float e1,e2,e3;
float k1,k2,k3;
float g1,g2,g3;
char c1[12];
char c2[4];
string c,c3,c4,c5,c6,c7,c8;
int n,k,h;
ifstream infile1;
ofstream outfile1;
infile1.open("HISTORY");
outfile1.open("interfacial");
for(h=0;h<1;h++) //h为构型循环次数,共计5个构型
{
infile1>>c1>>d1>>d2>>d3>>d4>>d5 //注:d2是体系中所有的原子个数;
>>e1>>e2>>e3
>>k1>>k2>>k3
>>g1>>g2>>g3;
for(k=1;k<(d2+1);k++)
{
infile1>>c2>>n>>b1>>b2
>>x>>y>>z
>>v1>>v2>>v3; //读取每个原子的坐标和速度
a[k][0]=x;
a[k][1]=y;
a[k][2]=z;
} //注:此循环用于建立a[100][3]数组,实现将2000原子的坐标依次存在a的二维数组中;
f1(a,(d2+1),e1,e2,k2,g3);
for (int r1=1;r1<2001;r1++)
for (int r2=1;r2<30;r2++)
{outfile1<<B[r1][r2]<<'\n';}
outfile1<<'\n';
outfile1<<'\n';
outfile1<<'\n';
for(int i1=0;i1<(d2+1); i1++)
for(int j1=0;j1<3; j1++)
{
a[i1][j1]=0;
} //注:将数组a[2001][3]归零;
for(int i5=1;i5<(d2+1); i5++)
for(int j5=0;j5<30; j5++)
{
B[i5][j5]=0;
} //注:将数组B[2001][20]归零;
}//构型循环
outfile1.close();
infile1.close();
return 0;
}//主函数