Bonjour, j'ai depuis hier un petit problème de désallocation mémoire au sujet d'une matrice qui est définie comme un pointeur sur une structure contenant 2 entiers et un tableau de taleau d'entiers. J'ai pourtant bien vérifié mes allocations et désallocation et un des free de la boucle déconne et me provoque une SEG FAULT. je ne sais pas pourquoi ça marche pas. Merci de m'aider si vous trouvez une explication logique.
Bonne journée
Voici les sources :
matrix.h:
#ifndef _MATRIX_H
#define _MATRIX_H
#define type int
struct _matrix{
int h_dim;
int v_dim;
type** coefs;
};
#define matrix _matrix*
matrix m_allocate(int, int);
matrix m_remplir(matrix);
int m_afficher(matrix);
int m_freed(matrix);
#endif //_MATRIX_H
matrix.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "matrix.h"
matrix m_allocate(int m, int n){
matrix A;
int j;
A->h_dim = m;
A->v_dim = n;
A->coefs=(int**)malloc((A->v_dim)*sizeof(int*));
for(j=0;j<=(n-1);j++)
A->coefs[j]=(int*)malloc((A->h_dim)*sizeof(int));
return A;
}
int m_freed(matrix A){
int j;
for(j=A->v_dim-1;j>=0;j--){
printf("%d\n",j);
free(A->coefs[j]);
}
free(A->coefs);
return EXIT_SUCCESS;
}
matrix m_remplir(matrix A){
int m=h_dim_r(A);
int n=v_dim_r(A);
int i,j;
fprintf(stdout, "\n\nMatrice %d,%d\n\n",h_dim_r(A),v_dim_r(A));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
fprintf(stdout,"Coefficient A[%d][%d]=",i,j);
fscanf(stdin,"%d",&A->coefs[i-1][j-1]);
}
return A;
}
int m_afficher(matrix A){
int i,j;
int m=A->h_dim-1;
int n=A->v_dim-1;
fprintf(stdout, "\n\nMatrice %dx%d\n\n", A->h_dim, A->v_dim);
for(i=0;i<=m;i++){
for(j=0;j<=n;j++)
fprintf(stdout, "%d\t", A->coefs[i][j]);
fprintf(stdout, "\n");
}
return EXIT_SUCCESS;
}
Prgm.c
#include <stdio.h>
#include <stdlib.h>
#include "matrix.h"
int main(int argc, char *argv[])
{
matrix A;
A=m_allocate(atoi(argv[1]), atoi(argv[2]));
A=m_remplir(A);
m_afficher(A);
m_freed(A);
return 0;
}
Merci de votre précieuse aide!
C'est pas tant que ce que je réalise soit important mais c'est pour comprendre ce qui ne marche pas et mes erreurs.