我在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进行进一步的操作。
感谢您的帮助:)
答案 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]
时,您很可能从数组中读取一些任意值,或者在数组旁边读取一些任意内存位置。