Неправильные значения в массиве Double - PullRequest
0 голосов
/ 26 марта 2011

У меня проблема с получением неправильных значений в массиве double.

Вместо того, чтобы получать значения, которые я хотел бы иметь в "printf" после определения значений массива одно за другим, я получил 0

 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 ]

2 голосов
/ 26 марта 2011

Индексы массива C ++ начинаются с нуля.Индекс всегда должен быть меньше экстента массива.Например, ваши первые три цикла должны быть:

for(i=0; i < M; i++){                     
    for (j=0; j <= K; j++){           
        for (k=0; k <= K; k++)
0 голосов
/ 26 марта 2011

Индексы в вашем массиве варьируются от 0 до M-1 (два других от 0 до K). Поэтому, когда вы обращаетесь к Phik[M], вы, скорее всего, читаете какое-то произвольное значение из вашего массива или произвольную ячейку памяти рядом с вашим массивом.

...