salut tout le monde !

je suis plutôt débutant en C et je dois réaliser une classe matrice en C.

J'ai trois fichiers :
matrice.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
typedef struct matrice *matrice;
 
/* Fonctions */
matrice initialiserMatriceNulle(int, int);
matrice initialiserMatrice(int, int);
 
///* Procédures */
void afficherMatrice(matrice);
matrice.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
#include "matrice.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
struct matrice
    {
    int nbLigne;
    int nbColonne;
    float **tableau;
    };
 
 
 
//* Procédures */
//* afficherMatrice(matrice) : Cette procédure affiche une matrice */
void afficherMatrice(matrice m)
{
    int i,j;
    for(i=0;i<m->nbLigne;i++)
        {
        for(j=0;j<m->nbColonne;j++)
            {
            printf("\t %lf ",m->tableau[i][j]);
            }    
        printf("\n");
        }    
}
 
//* Fonctions */
matrice initialiserMatriceNulle(int m, int n)
{
    matrice maMatrice;
    maMatrice = (matrice)malloc(sizeof(struct matrice));
    maMatrice->nbLigne = m;
    maMatrice->nbColonne = n;
 
    maMatrice->tableau = malloc(m*sizeof(*(maMatrice->tableau)));
 
    int i,j;
 
    for(i=0;i<m;i++) 
        maMatrice->tableau[i] = malloc(n*sizeof(**(maMatrice->tableau))); 
 
   for(i=0;i<m;i++) 
      for(j=0;j<n;j++) 
            maMatrice->tableau[i][j]= 4;
 
    return maMatrice;
}
 
matrice initialiserMatrice(int m, int n)
{
    matrice maMatrice = initialiserMatriceNulle(m,n);
    int i,j;
 
    /* m et n doivent être testés avant > 0 et < NMAX */
 
    for(i=0;i<m;i++)
        {
        printf("\nLigne %d :\n",i+1);
        for(j=0;j<n;j++)
                {
                printf("\nElement a[%d][%d] = ",i+1,j+1);
                scanf("%lf",&maMatrice->tableau[i][j]);
                }
        }        
    return maMatrice;
}

main.c (pour tester)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
#include "matrice.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
main()
{
  int m,n;
  matrice maMatrice,m1,m2;
  printf("Nombre de lignes : ");
  scanf("%d",&m);
  printf("\nNombre de colonnes : ");
  scanf("%d",&n);
 
  maMatrice = initialiserMatriceNulle(m, n);
  afficherMatrice(maMatrice);
 
      m1 = initialiserMatrice(m, n);
  afficherMatrice(m1);
 
system("PAUSE");	
  return 0;
}
: Il m'est imposé de mettre la structure dans matrice.c et de créer un pointeur vers cette structure dans le .h. Ce serait pour "cacher" comment je code une matrice. Quelqu"un pourrait-il m'apporter des infos à ce sujet ? merci.

: La fonction initialiserMatriceNulle semble marcher. (j'ai mis 4 pour voir si ça affichait bien 4). Par contre la fonction initialiserMatrice me donne une matrice de bonne dimension mais avec que des 0 (même pas des 4). J'ai dû oublier un truc élémentaire ?

: Avant de quitter le programme, je dois libérer la mémoire ? Je ne peux pas faire seulement un free(matrice) ? il faut que je désalloue toutes les cases. C'est à ce moment là que je crie ausssssssseeeeeeeecccccourrrrrrrssss je suis perdu !

Voilà ça fait beaucoup de questions. Je tiens à préciser que je travaille avec dev c++ et que j'ai déjà regardé la faq et quelques sujets pour faire mes allocations mémoires, mais avec la structure ça complique les choses...

Si quelqu'un peu répondre à une des trois questions... hésitez pas !
Merci

Manu