Affichage des elements d'une matrice en C

Résolu/Fermé
gahmed - 17 janv. 2010 à 03:12
 gahmed - 17 janv. 2010 à 14:32
Bonjour,
j'ai un problème avec mon programme C. Tous tournent à merveille sauf la partie affichage. Si je compile ça passe de même que si j'exécute. Le problème qu'à l'affichage le programme n'affiche quelques valeurs que j'ai eu saisies.
Voici mon code

#include<stdio.h>
#include<stdlib.h>

//Crétion d'un nouveau type appelé matrice
typedef struct matrice{
        int **el;
        int n_lig;
        int n_col;
        }mat;
        mat T;
//Fin création        
        
int main(){
     int i,j;
     
//Saisie de la taille de la matrice     
      printf("Donner le nombre de lignes :");
      scanf("%d", &T.n_lig);  
      printf("Donner le nombre de colonnes :");
      scanf("%d", &T.n_col);
//Fin saisie
      
//Vérification de l'allocation de la mémoire
      T.el=(int**) malloc(T.n_lig*T.n_col*sizeof(int));
      if (T.el == NULL)
       {
        printf("Memoire non allouee");       
        exit(0);
        }
        else
        printf("Memoire allouee");
//Fin vérification

//Saisie de valeurs sur la matrice
      for (i=0; i<T.n_lig; i++){
          for (j=0; j<T.n_col; j++){
               printf("\nT[%d,%d]=",i,j);
               scanf("%d", &T.el[i,j]);
                 }
                 }
//Fin saisie

//Affichage des éléments de la matrice                 
      printf("les elements de la matrice sont :");
      for (i=0; i<T.n_lig; i++){
          for (j=0; j<T.n_col; j++){   
            printf("%d ", T.el[i,j]);
                   }
                   }
//Fin affichage                             
                  getch();
       return 0;
       }

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
17 janv. 2010 à 09:53
Salut,

Comme dit loupius : T.el[i,j] ne fera pas ce que tu souhaites. Si tu veux une matrice il faut utiliser T.el[i][j].
Ensuite pour utiliser getch(), tu dois inclure conio.h ou encore mieux, utiliser getchar(); (fonction standard).
Et enfin l'erreur vient d'une mauvaise allocation mémoire.
T.el=(int**) malloc(T.n_lig*T.n_col*sizeof(int));
Tu alloues un seul tableau d'une dimension. Toi ce que tu veux, c'est un tableau 2D.
Il faudrait donc faire :
T.el=malloc(T.n_lig*sizeof(int));
if (T.el==NULL) {
   ...
}
for(i=0;i<T.n_lig;i++) {
   T.el[i]=malloc(T.n_col*sizeof(int));
    if (T.el[i]==NULL) {
         ...
    }
}

Et enfin, il ne faut surtout pas oublier de libérer les zones allouées avec free.
for(i=0;i<T.n_lig;i++) {
   free(T.el[i]),T.el[i]=NULL;
}
free(T.el),T.el=NULL;


cdlt,
2
Merci beaucoup fiddy maintenant tous tournent à merveille
0