Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

[Langage C] Tableau dynamique



  1. #1
    Mike12

    [Langage C] Tableau dynamique


    ------

    Bonjour,

    J'essaye de comprendre le fonctionnement des pointeurs, des tableaux dynamiques...
    J'ai exécuté un code (que j'ai trouvé sur internet et dont j'ai un peu adapté) et je n'arrive pas à comprendre pourquoi il plante
    Le code concerne la somme de deux tableaux dynamiques (plutôt des matrices en fait)

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    float ** alloueMatrice(int n, int m) {
     float ** mat = malloc(sizeof(float*) * n);
     int i;
     for (i = 0 ; i < n ; i++)
         mat[i] = malloc(sizeof(float) * m);
     return mat;
      
    }
    
    
    void libereMatrice (float **mat,int n){
     int i;
     for (i = 0 ; i < n ; i++)
         free (mat[i]);
     free (mat);
     } 
    
    
    float **addition_mat(float **mat1, float **mat2, int nblignes, int nbcolonnes){
     float ** mat3 = alloueMatrice(nblignes,nbcolonnes);
     int i,j;
     for (i=0 ; i<nblignes ; i++){
     for (j=0 ; j<nbcolonnes ; j++)
       mat3[i][j] = mat1[i][j] + mat2[i][j];
     }
      return mat3;
     } 
    
    
    
    int main(int argc, char *argv[])
    {
      
     
      float mat1[2][2] = {{1, 10}, {5, 7}};
      float mat2[2][2] = {{6, 2}, {14, 18}};
      int n1=2;
      int m1=2;
      
      float **mat3 = addition_mat(mat1,mat2,n1,m1);
      printf ("Somme des deux matrices :\n");
      
      libereMatrice (mat3,n1);
      mat3 = NULL;
      
      system("PAUSE");	
      return 0;
    }

    Tout me paraît bien défini pourtant (il manque peut être une méthode "afficher" à faire). Je ne vois pas d'erreur de synthaxe ou autre.

    Merci pour votre aide

    -----

  2. Publicité
  3. #2
    polo974

    Post Re : [Langage C] Tableau dynamique

    parce que mat1 et mat2 ne sont pas des float **....
    tu as déclaré mat1 et mat2 comme des float[2][2], soit un tableau de 2 tableaux de floats, il n'y a pas de tableau de pointeur intermédiaire, comme c'est fait dans alloueMatrice.
    alors qu'un float** est un pointeur sur un pointeur de float.


    bref, c'est assez pénible de travailler avec des matrices (de taille libre) en C sans une bonne petite librairie...
    Jusqu'ici tout va bien...

  4. #3
    Mike12

    Re : [Langage C] Tableau dynamique

    Bonjour polo974 !

    Je vais corriger cela tout de suite, merci !
    De quelle bibliothèque parlez vous au juste ?

  5. #4
    Mike12

    Re : [Langage C] Tableau dynamique

    Cela continue à planter mais aucune erreur repérée.

  6. A voir en vidéo sur Futura
  7. #5
    albanxiii
    Modérateur

    Re : [Langage C] Tableau dynamique

    Bonjour,

    Un conseil, exécutez pas à pas dans un debugger, tout en inspectant les variables manipulées.

    @+
    Not only is it not right, it's not even wrong!

  8. #6
    Mike12

    Re : [Langage C] Tableau dynamique

    Bonjour Albanxiii,

    Entendu, je vais faire ça !
    J'espère arriver à bout de cette fameuse erreur.

  9. Publicité
  10. #7
    polo974

    Re : [Langage C] Tableau dynamique

    par exemple http://www.gnu.org/software/gsl/
    mais c'est juste un exemple...

    sinon, comme tu ne dis ni ce que tu as modifié, ni quelles sont les erreurs et warning lors de la compil, on aura du mal à t'aider...

    bref, toujours se rappeler qu'en C, on peut quasiment tout faire (donc surtout des erreurs au début...)

    avoir un pointeur ne veut pas dire qu'il pointe sur quelque chose de correct, alors des pointeurs de de pointeurs ...
    Jusqu'ici tout va bien...

  11. #8
    Garlik

    Re : [Langage C] Tableau dynamique

    Le code présenté ne devrait d'ailleurs meme pas compiler. Comme on te l'a dit, tu ne manipule pas les meme type d'objets et il est donc normal que ca plante (si le compilateur a malgré tout accepté ce code).
    Par ailleurs, meme s'il y a peu de chance que ca pose probleme dans ce cas particulier, ne pas verifier le code de retour d'un malloc() a tendance à me faire saigner des yeux...

    Enfin, montre nous ta modif et on pourra sans doute t'aider.

Discussions similaires

  1. Tableau, langage C
    Par ABreton dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 31/12/2013, 10h37
  2. Tableau multidimensionnel, langage C
    Par ABreton dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 16/12/2013, 16h40
  3. Tableau croisé dynamique
    Par Hate64 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 22/06/2013, 22h22
  4. conversion d'un tableau(langage C)
    Par narakphysics dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 08/04/2012, 14h06
  5. Tableau en langage C
    Par Laefus dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 20/08/2007, 23h27