Hello les gens!
Je viens quemander de l'aide afin de me sortir de ce programme qui me prend la tete.
But de l'exericice: creer un programme qui manipule des matrices. Je vous poste ici la partie principale qui s'occupe de l'allocation de la memoire, de lire un fichier contenant une matrice sous la forme
2 3 //nbre de lignes et de colonnes
1 2 3
4 5 6
D'ecrire dans le meme fichier...
Le probleme vient de l'allocation (quelques warnings a la compilation avec gcc mais rien vis a vis de l'alloc), et j'ai le droit a un beaux segfault!
Bref, je remercie quiconque tentera de jeter un oeil au programme et me permettra de corriger mon erreur.

Voila le source:

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
int **matrix;
int nb_lignes;
int nb_colonnes;
} matrix;
 
void write_matrix(FILE *p,matrix *m) {
int i;
int j;
if (p==NULL) return; //ouverture du fichier matrice.txt impossible
fprintf(p,"%i%s%i\n",m->nb_lignes," ",m->nb_colonnes);
for (i=0; i<m->nb_lignes; i++) {
for (j=0; j<m->nb_colonnes; j++) {
fprintf(p,"%i%s",m->matrix[j]," ");
}
fprintf(p,"\n");
}
}
 
matrix * read_matrix(FILE *p) {
int i,j;
matrix *m;
m=(matrix *)malloc(sizeof(matrix));
if (p==NULL) return; //ouverture en lecture impossible
fscanf(p,"%i%i",&m->nb_lignes,&m->nb_colonnes);
m->matrix=(int**)calloc(m->nb_lignes,sizeof(int**));
for (i=0; i<m->nb_lignes; i++) {
m->matrix=(int*)calloc(m->nb_colonnes,sizeof(int*));
}
for (i=0; i<m->nb_lignes; i++) {
for (j=0; j<m->nb_colonnes; j++) {
fscanf(p,"%i",&m->matrix[j]);
printf("%i%s",m->matrix[j]," ");
}
printf("\n");
}
return &m;
}
 
void affic_matrix(matrix *m) {
int i,j;
printf("Matrice de taille : %i * %i\n",m->nb_lignes,m->nb_colonnes);
for (i=0; i<m->nb_lignes; i++) {
for (j=0; i<m->nb_colonnes; j++){
printf("%i%s",m->matrix[j]," ");
}
printf("\n");
}
}
 
 
matrix * allouer_matrice(int nbli, int nbcol) {
matrix *m;
int i;
m->nb_lignes=nbli;
m->nb_colonnes=nbcol;
m->matrix=(int**)calloc(nbli,sizeof(int**));
for (i=0; i<nbcol; i++) {
m->matrix=(int*)calloc(nbcol,sizeof(int*));
}
return &m;
}
 
void remplir_matrice(matrix *m){
int i,j;
printf("Remplissage de matrice %dx%d\n",m->nb_lignes,m->nb_colonnes);
for(i=0;i<m->nb_lignes;i++){
for(j=0;j<m->nb_colonnes;j++){
printf("element (%d,%d)?",i,j);
scanf("%i",&(m->matrix[j]));
}
}
}
 
int main() {
matrix * m;
int i, nbli, nbcol;
FILE *fic;
fic=fopen("matrix.txt","w");
if (fic!=NULL){
printf("Nombre de lignes : ");
scanf("%i",&nbli);
printf("Nombre de colonnes : ");
scanf("%i",&nbcol);
printf("huhu\n");
m=allouer_matrice(nbli, nbcol);
//remplir_matrice(m);
//printf("%i %i %i\n",m->nb_lignes, m->nb_colonnes, m->matrix[1][1]);
//write_matrix(fic,m);
//m=read_matrix(fic);
//affic_matrix(m);
}
}