C : Allocation Dynamique de matrices

Bonjour,

Je cherche à créer une procédure qui demande à l'utilisateur la dimension de 2 matrices puis les déclare pour ensuite demander à l'utilisateur de les remplir.
Quand je lance l'exe, la console me demande la dimension des matrices et là c'est le drame.
Je pense que le problème est dans l'allocation dynamique ou bien dans une mauvaise utilisation des pointeurs : vous verrez, c'est très étoilé comme programme ! =]
Merci beaucoup pour toute proposition.

#include ...
Déclarations...

int main()
{
int i,j,k,n,selection;
double **mat1,**mat2;

// Initialisation des matrices //
saisie (&mat1,&mat2,&n);
printf("Voici la matrice 1 :\n\n");afficher(mat1,n);printf("Voici la matrice 2 :\n\n");afficher(mat2,n);

// On libère la mémoire utilisée par les matrices //
for (k=0; k<n; k++) if(mat1[k] != NULL) free(mat1[k]);
if (mat1 != NULL) free(mat1);

for (k=0; k<n; k++) if(mat2[k] != NULL) free(mat2[k]);
if (mat2 != NULL) free(mat2);

}

void afficher(double **A,int m)
{
int j,k;
for (j=0;j<m;j++)
{
for (k=0;k<m;k++) printf("%lg ",A[j][k]);
printf("\n");
}
printf("\n\n");
}

void saisie (double * **A,double * **B,int *m)
{
int i,j,k;

// Dimension des matrices //
printf("Dimension n = ");scanf("%d",m);

//On réserve A//
*A = (double**)calloc(*m, sizeof(double*));
if (*A == NULL)
{
printf("\n Allocation dynamique IMPOSSIBLE pour A");
getch( );
}
for (k=0; k< *m ; k++)
{
*A[k] = (double*)calloc(*m,sizeof(double));
if (*A[k] == NULL)
{
printf("\n Allocation dynamique IMPOSSIBLE pour A[%d]",k);
getch( );
}
}

//On réserve B//
*B = (double**)calloc(*m, sizeof(double*));
if (*B == NULL)
{
printf("\n Allocation dynamique IMPOSSIBLE pour B");
getch( );
}
for (k=0; k< *m ; k++)
{
*B[k] = (double*)calloc(*m,sizeof(double));
if (*B[k] == NULL)
{
printf("\n Allocation dynamique IMPOSSIBLE pour B[%d]",k);
getch( );
}
}

// Remplissage des matrices //
printf("Matrice A:\n");
for (i=0;i<*m;i++)
{
for (j=0;j<*m;j++) printf("A[%d][%d] = ",i,j);scanf("%lf",&A[i][j]);printf("\n");
}

printf("Matrice B:\n");
for (i=0;i<*m;i++)
{
for (j=0;j<*m;j++) printf("B[%d][%d] = ",i,j);scanf("%lf",&B[i][j]);printf("\n");
}
}
Configuration: Windows XP
Firefox 2.0.0.20

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Salut,
    Ton code est bien compliqué.
    Usuellement, on alloue les matrices avant de les passer en arguments, en plus ça te permettra d'avoir les malloc avec les free :). Et ça te simplifiera la vie ;)
    Si ça ne marche toujours pas, poste ton nouveau code et n'oublie pas stp de le mettre entre des balises code (trois cases à droite du bouton gras). Ca permet de garder l'indentation :)
    Bonne chance