关于handled exception .exe:access violation的解决方法

来源:互联网 发布:怎么卸载ubuntu系统 编辑:程序博客网 时间:2024/05/22 15:31

 我遇到handled exception .exe:access violation的问题无法解决,请大家一起来看看怎么回事。

 

 int X,Y,Z;
 float x,y,z,x1,y1,r,h;
 #include  <stdio.h>
 void jingti(float c[][4],float (*p)[4])       //晶体的子程序,其中X,Y,Z为晶体三个方向的晶胞数
{
 int i,j;
 for(i=0;i<12;i++)                 
   {c[i][1]=c[i][1]*7.41;
    c[i][2]=c[i][2]*4.94;
    c[i][3]=c[i][3]*2.54;
   }
 
 for(i=0;i<12;i++)                 
   {for(j=0;j<4;j++)                 
      *(*(p+i)+j)=c[i][j];}

 for(i=0;i<12*X-12;i++)                         //x坐标增加
   {*(*(p+i+12)+0)=*(*(p+i)+0);
    *(*(p+i+12)+1)=*(*(p+i)+1)+7.41;
    *(*(p+i+12)+2)=*(*(p+i)+2);
    *(*(p+i+12)+3)=*(*(p+i)+3);}

 for(i=0;i<12*X*Y-12*X;i++)                        //y坐标增加
   {*(*(p+i+12*X)+0)=*(*(p+i)+0);
    *(*(p+i+12*X)+1)=*(*(p+i)+1);                
    *(*(p+i+12*X)+2)=*(*(p+i)+2)+4.94;
    *(*(p+i+12*X)+3)=*(*(p+i)+3);}

 for(i=0;i<12*X*Y*Z-12*X*Y;i++)                       //z坐标增加
   {*(*(p+i+12*X*Y)+0)=*(*(p+i)+0);
    *(*(p+i+12*X*Y)+1)=*(*(p+i)+1);                
    *(*(p+i+12*X*Y)+2)=*(*(p+i)+2);
    *(*(p+i+12*X*Y)+3)=*(*(p+i)+3)+2.54;}
 return;
}
 void c_qiu(float b[][4],int n)              //求C60球指定位置坐标的子程序,x,y,z为指定的球心坐标
{
 float k,l,m;       
 int i;
 k=0;
 l=0;
 m=0;
 for(i=0;i<n;i++)                   //求C60的原始球心
   {k=k+b[i][1];
    l=l+b[i][2];
    m=m+b[i][3];}
 k=k/n;
 l=l/n;
 m=m/n;
 for(i=0;i<n;i++)                    //球心移到(x,y,z)处
   {b[i][1]=b[i][1]+x-k;
    b[i][2]=b[i][2]+y-l;
    b[i][3]=b[i][3]+z-m;}
 return;
 }
 void wadong(float a[][4],float (*p)[4])    //在晶体上挖去一个圆柱体
{int i;
 


 p=a;
 for(i=0;i<12*X*Y*Z;i++)                        
   if(((*(*(p+i)+1)-x1)*(*(*(p+i)+1)-x1)+(*(*(p+i)+2)-y1)*(*(*(p+i)+2)-y1)-r*r)<=1e-6&&(*(*(p+i)+3))>h)
     {*(*(p+i)+0)=0;
      *(*(p+i)+1)=0;
      *(*(p+i)+2)=0;
      *(*(p+i)+3)=0;}
return;
 }
void main()
{auto float (*p)[4]=NULL;
 float a[12][4],b[60][4];        
 int i,j;
 FILE *fp;
 p=a;
 printf("输入晶体个方向晶胞数:/n");
 scanf("%d %d %d",&X,&Y,&Z);
 printf("/n");
 
 printf("输入所挖圆柱体的圆心、半径及高度:/n");
 scanf("%f %f %f %f",&x1,&y1,&r,&h);
 printf("/n");
 
 printf("输入C60球指定的坐标:/n");
 scanf("%f %f %f",&x,&y,&z);
 printf("/n");
 
 fp=fopen("jingbao.xyz","r+");
 for(i=0;i<12;i++)
 {for(j=0;j<4;j++)
    fscanf(fp,"%f",&a[i][j]);
    fprintf(fp,"/n");}
 
 jingti(p,a);                                          //调用晶体坐标的子程序
 
 fp=fopen("C60.xyz","r+");
 for(i=0;i<60;i++)
 {for(j=0;j<4;j++)
    fscanf(fp,"%f",&b[i][j]);
    fprintf(fp,"/n");}
 
 c_qiu(b,60);                                 //调用求C60指定位置坐标的子程序,可任意设定球心位置

 
 wadong(a,p);                                              //调用挖洞的子程序,调用时可任意设定所挖圆柱体的位置和大小
 
 
 


 fp=fopen("JINGTI.xyz","w+");
 for(i=0;i<12*X*Y*Z;i++)
   {for(j=0;j<4;j++)
      fprintf(fp,"%10.6f",*(p++));
      fprintf(fp,"/n");}
 for(i=0;i<60;i++)
   {for(j=0;j<4;j++)
      fprintf(fp,"%10.6f",b[i][j]);
      fprintf(fp,"/n");}
 fclose(fp);
}