之前是出现应用程序错误的对话框,自己试着把程序调来调去改来改去后,现在又出现内存的错误。这到底是什么错误啊,哪位大虾或者有这个经验的帮帮忙。
下面是我写的程序。这是主函数部分。前面的都是复数与矩阵库运算库,即complex类的声明和定义。
void main()
{
int n,i,m,c;
double X[64]={8.719486461068,6.8193347340691,1.15486129825143,1.78330276284385,
8.79848218940725,2.32994642114653,1.01136947787404,5.7686494784199,
6.9598355166345,4.47763103667546,8.2501836350581,8.24208318585227,
                4.4549258916443,6.92745296939813,5.73527811870724,0.9902178976729,
2.3383330592581,8.8277162663549,1.817526496756,1.18324245791416,
6.83513871006403,8.7194863082151,6.8193347038166,1.15486129691215,
1.78330276714735,8.7984821938859,2.32994642474927,1.0113694806064,
5.7686494804675,6.9598355181114,4.4776310377464,8.25018363583627,
8.242083186418,4.4549258920556,6.92745296969724,5.735278118925,
0.9902178978311,2.3383330593718,8.8277162664352,1.8175264968433,
1.1832424579791,6.83513871011166,8.7194863082499,6.81933470384195,
1.1548612969307,1.7833027671609,8.7984821938958,2.3299464247567,
1.0113694808183,5.7686494805064,6.9598355181254,4.477631037753,
8.25018363584024,8.2420831864207,4.4549258920577,6.9274529696991,
5.73527811892643,0.9902178978326,2.3383330593719,8.8277162665365,
1.81752649686155,1.1832424579887,6.8351387101175,8.7194863082538};
complex S2,S1,S,S0,a,b,xn,S10;
for(i=0;i<64;i++)                          //第一个循环 i
{
n=0;
for(n=0;n<64;n++)                     //第二个循环 n
{
n=0;
for(m=0;m<64;m++)                //第三个循环 m
{
S0=0;
if(n==0)                    //n=0 时 S[i,n]=1/64*sum(n=0,63)X[n]
{
S10=0;
for(n=0;n<64;n++)
{
S1=xn;
S1=S1+S10;
S10=S1;
}
S=1.0/64*S1;
}
else
{
for(m=0;m<64;m++)
{
if(n+m>63)
{
                            c=n+m-64;         //判断m+n是否超过64
X[n+m]=X[c];
}
                        else
{  
}
    a.re=0;
a.im=20*m^2/n^2;
b=exp(a);
        S1=X[n+m]*b;        //复数部分运算部分
S=S1*S2;
}
}
S=S+S0;
S0=S;
}
}
            S=abs(S);
cout<<S<<endl;
return;

}
}

解决方案 »

  1.   

    int n,i,m,c; 
    complex S2,S1,S,S0,a,b,xn,S10; 
    这些个变量你先赋个初值看看,会不会你用到的时候还没有值啊
      

  2.   

    2处地方可能越界,造成这个错误。if(n+m>63)
    {
    c=n+m-64;        //判断m+n是否超过64
    X[n+m]=X[c];

            S1=X[n+m]*b;        //复数部分运算部分 
      

  3.   

    谢谢楼上几位的帮助,确实是数组那边的问题。我现在改成这样,但是结果却出不来。感觉好像没错吧,怎么就是会出不来呢 
    void main()
    {
    int n,i,m,c;
    double X[64]={8.719486461068,6.8193347340691,1.15486129825143,1.78330276284385,
    8.79848218940725,2.32994642114653,1.01136947787404,5.7686494784199,
    6.9598355166345,4.47763103667546,8.2501836350581,8.24208318585227,
            4.4549258916443,6.92745296939813,5.73527811870724,0.9902178976729,
    2.3383330592581,8.8277162663549,1.817526496756,1.18324245791416,
    6.83513871006403,8.7194863082151,6.8193347038166,1.15486129691215,
    1.78330276714735,8.7984821938859,2.32994642474927,1.0113694806064,
    5.7686494804675,6.9598355181114,4.4776310377464,8.25018363583627,
    8.242083186418,4.4549258920556,6.92745296969724,5.735278118925,
    0.9902178978311,2.3383330593718,8.8277162664352,1.8175264968433,
    1.1832424579791,6.83513871011166,8.7194863082499,6.81933470384195,
    1.1548612969307,1.7833027671609,8.7984821938958,2.3299464247567,
    1.0113694808183,5.7686494805064,6.9598355181254,4.477631037753,
    8.25018363584024,8.2420831864207,4.4549258920577,6.9274529696991,
    5.73527811892643,0.9902178978326,2.3383330593719,8.8277162665365,
    1.81752649686155,1.1832424579887,6.8351387101175,8.7194863082538};
    complex S2,S1,S,S0,a,b,xn,S10;
    double f;
    for(i=0;i<64;i++)                          //第一个循环 i
    {
    n=0;
    for(n=0;n<64;n++)                     //第二个循环 n
    {
    n=0;
    for(m=0;m<64;m++)                //第三个循环 m
    {
    S0=0;
    if(n==0)                    //n=0 时 S[i,n]=1/64*sum(n=0,63)X[n]
    {
    S10=0;
    for(n=0;n<64;n++)
    {
    S1=X[n];
    S1=S1+S10;
    S10=S1;
    }
    S=1.0/64*S1;
    }
    else
    {
    for(m=0;m<64;m++)
    {
    if(n+m>63)
    {
                                c=n+m-64;         //判断m+n是否超过64
    }
                            else
    {  c=m+n;
    }
        a.re=0;
    a.im=0.098125*m*i;
    S2=exp(a);
    f=m^2/n^2;
    b=exp(19.7192*f);
            S1=X[c]*b;
    S=S1*S2;
    }
                        S=S+S0;
    S0=S;
    }


    S=abs(S);
    cout<<S<<endl;
    /*  if(l=64)
            cout<<"#"<<endl;
    else         */           
    return;

    }
    }
    }
      

  4.   

    为什么结果只有一个<-1.#IND,0>呢,应该是64*64个才对啊 
      

  5.   

    这个<-1.IND,0>又是什么数据