Ошибки при использовании динамически распределяемых массивов

#c #dynamic-memory-allocation

#c #динамическое выделение памяти

Вопрос:

Я не понимаю, почему у меня проблема в этом коде после выполнения некоторых тестов я понял, что в этой функции determinant_V2 я даже не могу печатать Mat[0][0] . Я не понимаю, почему Mat нельзя использовать в качестве параметра

 int main()
{
    int n =0, pos=1;
    float tmp=0;
    printf("entrez la taille de la matrice :  ");
    scanf("%d",amp;n);
    float** Mat = (float**) calloc(n,sizeof(float *));
    for(int i = 0 ; i< n; i  ){
        Mat[i] = (float*) calloc(n,sizeof(float));
    }
    for(int i=0; i<n; i  ){
        for(int j=0; j<n; j  ){
            printf("n entrer les valeurs de A[%d][%d] ",i 1,j 1);
            scanf("O",Mat i j);
        }
    }
    printf("delta general = %lf", determinant_V2(Mat,n));
    return 0;
}

float** SousMatMinusLine(float** Mat, int taille ,int line){
    float** sousMat = (float**) calloc(taille-1,sizeof(float *));
    for(int i = 1 ; i< taille-1 ; i  ){
        if(i!=line){
            sousMat[i] = (float*) calloc(taille-1,sizeof(float));
            for(int j =1 ;j < taille-1; j  ){
                sousMat[i][j] = Mat[i][j];
            }
        }
    }
    //free(Mat);
    return sousMat;
}

float determinant_V2(float ** Mat, int taille ){
    int k = 1;
    float det =0.0;
    if(taille == 1){
        return Mat[0][0];
    }
    for(int i =0 ; i<taille; i  ){
        float ** sous_Mat = SousMatMinusLine(Mat, taille,i);
        det  = determinant_V2(sous_Mat, taille -1 )*k ;
        k *= -1;
    }
    return det;
}
 

Ответ №1:

Этот вызов scanf

 scanf("O",Mat i j);
 

неверно. Вам нужно написать

 scanf("O", *( Mat   i ) j);
 

Комментарии:

1. я признаю, что это была глупая ошибка, спасибо, что помогли мне