双精度数组中的错误值

时间:2011-03-26 18:50:36

标签: c++ arrays typedef

我在double数组中获取错误值时遇到问题。

在逐个定义数组的值后,我没有得到“printf”中我想要的值,而是取而代之的是

 const int M=20;
 const int K=2;
 typedef double polybasis[M][K+1][K+1];
 polybasis Phik;
 for(i=1; i <= M; i++){                     
    for (j=1; j <= K+1; j++){           
        for (k=0; k <= K+1; k++) {a0[k]=0.0;}
        a0[1]=1.000;
        a1=0.000;
        for (k=1; k <= K; k++){
            it=ind[k];
            for (l=1; l <= k+1; l++){
                a2 = a0[l];
                a0[l]= a1-(x[i][it])*a2;
                a1=a2;
            }
        }
        for (k=0; k <= K+1; k++) {ind[k]=0;}
        for (m=0; m <= K+1; m++) {
            Phik[i][j][m]=a0[m]; 
            Phik[i][j][m]=tmp*Phik[i][j][m];
            printf("Phi %i %i %i : %7.8f ; ao : %7.8f \n",i,j,m,Phik[i][j][m],a0[m]);
            //This is where I define the values that I need
        }
    }
}
//But in the end of the iteration, I got 0 values instead for every Phik[_][_][3]
//except the last one: Phik[20][3][3], from this test
printf("phi : %7.8f; \n",Phik[20][2][0]); 
printf("phi : %7.8f; \n",Phik[20][2][1]); 
printf("phi : %7.8f; \n",Phik[20][2][2]); 
printf("phi : %7.8f; \n",Phik[20][2][3]); 

我还是C ++的新手,所以我对内存泄漏一无所知。我知道最好使用指针来避免这种情况,但我需要使用typedef进行进一步的操作。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

C ++数组索引从零开始。索引必须始终小于数组的范围。例如,您的前三个循环应该是:

for(i=0; i < M; i++){                     
    for (j=0; j <= K; j++){           
        for (k=0; k <= K; k++)

答案 1 :(得分:0)

数组中的索引范围从0到M-1(另外两个从0到K)。因此,当您访问Phik[M]时,您很可能从数组中读取一些任意值,或者在数组旁边读取一些任意内存位置。