在VC6.0的环境下编写了一个C 语言程序 编译 连接都没有错误
但是在运行的时候出现“0xfff00000指令引用0xfff00000内存。该内存不能为read".
请问这是为什么 应该怎么调试
/*数值分析课计算实习第一题*/
#include"math.h"
#include"stdio.h"
/*求两个数的最小值*/
int min_value(int x,int y)
{
int min1;
if(x<=y)
min1=x;
else
min1=y;
return(min1);
}
/*求两个数的最大值*/
int max_value2(int x,int y)
{
int max1;
if(x>=y)
max1=x;
else
max1=y;
return(max1);
}
/*求三个数的最大值*/
int max_value3(int x,int y,int z)
{
int max1;
if(y>=x)x=y;
if(z>=x)
max1=z;
else
max1=x;
return(max1);
}
/*幂法求特征值*/
double power(double power_c[][502])
{
double power_u1[502],power_u0[502],sum1,power_u2,power_y[502],power_u3,B1,B,B0;
int i,j,m,n;
for(i=1;i<=501;i++)
{
power_u1[i]=1;
}
B1=1;
do
{
B0=B1;
for(i=1;i<=501;i++)
{
power_u0[i]=power_u1[i];
}
sum1=0;
for(i=1;i<=501;i++)
{
power_u2=power_u0[i]*power_u0[i];
sum1=sum1+power_u2;
}
for(i=1;i<=501;i++)
{
power_y[i]=power_u0[i]/sqrt(sum1);
}
j=1;
for(i=4;i<=504;i++)
{
if(i<=6)
j=1;
else
j=j+1;
if(i<=502)
n=i;
else
n=502;
power_u1[i-2]=0;
for(m=j;m<=n;m++)
{
power_u3=power_c[i-m][m]*power_y[m];
power_u1[i-2]=power_u1[i-2]+power_u3;
}
}
B1=0.0;
for(i=1;i<=501;i++)
{
B=power_y[i]*power_u1[i];
B1=B1+B;
}
}while((fabs(B1-B0)/fabs(B1))>1e-12);
return(B0);
}
double inpower_u1[502],inpower_y[502];
/*LU分解法解带状线性方程组*/
double LU(double LU_c[][502])
{
double c1,sum1;
int i,j,k,t;
/*作分解A=LU*/
for(k=1;k<=501;k++)
{
for(j=k;j<=min_value(k+2,501);j++)
{
sum1=0;
for(t=max_value3(1,k-2,j-2);t<=k-1;t++)
{
c1=LU_c[k-t+3][t]*LU_c[t-j+3][j];
sum1=sum1+c1;
}
LU_c[k-j+3][j]=LU_c[k-j+3][j]-sum1;
}
if(k<501)
{
for(i=k+1;i<=min_value(k+2,501);i++)
{
sum1=0;
for(t=max_value3(1,i-2,k-2);t<=k-1;t++)
{
c1=LU_c[i-t+3][t]*LU_c[t-k+3][k];
sum1=sum1+c1;
}
LU_c[i-k+3][k]=(LU_c[i-k+3][k]-sum1)/LU_c[3][k];
}
}
}
/*求解Ly=b,Ux=y*/
for(i=2;i<=501;i++)
{
sum1=0;
for(t=max_value2(1,i-2);t<=i-1;t++)
{
c1=LU_c[i-t+3][t]*inpower_y[t];
sum1=sum1+c1;
}
inpower_y[i]=inpower_y[i]-sum1;
}
inpower_u1[501]=inpower_y[501]/LU_c[3][501];
for(i=500;i<=1;i--)
{
sum1=0;
for(t=i+1;t<=min_value(i+3,501);t++)
{
c1=LU_c[i-t+3][t]*inpower_u1[t];
sum1=sum1+c1;
}
inpower_u1[i]=(inpower_y[i]-sum1)/LU_c[3][i];
}
sum1=1;
for(i=1;i<=501;i++)
{
sum1=sum1*LU_c[3][i];
}
return(sum1);
}
/*反幂法求特征值*/
double inpower(double inpower_c[][502])
{
double inpower_u0[502],sum1,inpower_u2,B1,B,B0,H;
int i;
for(i=1;i<=501;i++)
{
inpower_u1[i]=1;
}
B1=0;
do
{
B0=B1;
for(i=1;i<=501;i++)
{
inpower_u0[i]=inpower_u1[i];
}
sum1=0;
for(i=1;i<=501;i++)
{
inpower_u2=inpower_u0[i]*inpower_u0[i];
sum1=sum1+inpower_u2;
}
for(i=1;i<=501;i++)
{
inpower_y[i]=inpower_u0[i]/sqrt(sum1);
}
H=LU(inpower_c);
B1=0;
for(i=1;i<=501;i++)
{
B=inpower_y[i]*inpower_u1[i];
B1=B1+B;
}
}while((fabs(B1-B0)/fabs(B1))>1e-12);
return(1.0/B0);
}
/*主程序*/
void main()
{
double c[6][502],c0[6][502],evalue1,evalue0,evalue2,minevalue,maxevalue,evalue[39],detA,condA;
int i,j,k;
/*把矩阵A的值放入压缩矩阵c中*/
for(i=3;i<=501;i++)
{
c[1][i]=-0.064;
}
for(i=2;i<=501;i++)
{
c[2][i]=0.16;
}
for(i=1;i<=501;i++)
{
c[3][i]=(1.64-0.024*i)*sin(0.2*i)-0.64*exp(0.1/i);
}
for(i=1;i<=500;i++)
{
c[4][i]=0.16;
}
for(i=1;i<=499;i++)
{
c[5][i]=-0.064;
}
evalue1=power(c);
for(i=1;i<=5;i++)
{
if(i!=3)
{
for(j=1;j<=501;j++)
{
c0[i][j]=c[i][j];
}
}
else
{
for(j=1;j<=501;j++)
{
c0[3][i]=c[3][i]-evalue1;
}
}
}
evalue0=power(c0);
evalue2=evalue0+evalue1;
if(evalue1>evalue2)
{
evalue0=evalue1;
evalue1=evalue2;
evalue2=evalue0;
}
if(fabs(evalue1)>fabs(evalue2))
maxevalue=fabs(evalue1);
else
maxevalue=fabs(evalue2);
minevalue=inpower(c);
for(k=1;k<=39;k++)
{
for(i=1;i<=501;i++)
{
c0[3][i]=c[3][i]-evalue1-k*(evalue2-evalue1)/40;
}
evalue[k]=inpower(c);
}
detA=LU(c);
condA=maxevalue/fabs(minevalue);
printf("λ1=%lf\n",evalue1);
printf("λ501=%lf\n",evalue2);
printf("λs=%lf\n",minevalue);
for(k=1;k<=39;k++)
{
printf("λi%d=%lf\n",k,evalue[k]);
}
printf("cond(A)2=%lf\n",condA);
printf("detA=%lf\n",detA);
}
太多了 不过希望大家能帮我看看