T TeKa K
Messages postés2Date d'inscriptionlundi 31 octobre 2005StatutMembreDernière intervention16 novembre 2005
-
2 nov. 2005 à 13:01
T TeKa K
Messages postés2Date d'inscriptionlundi 31 octobre 2005StatutMembreDernière intervention16 novembre 2005
-
16 nov. 2005 à 16:00
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:
#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
MNEMONIC
Messages postés59Date d'inscriptiondimanche 19 décembre 2004StatutMembreDernière intervention 1 septembre 2006 2 nov. 2005 à 16:43
Déja, sous windows, sizeof(int) = sizeof(int *) = sizeof(int **) = 4 octets ...
Si tu veux allouer pour le nombre de colonnes ou de lignes, il faut faire un
sizeof(int)*nbcols
joeBlaX
Messages postés1Date d'inscriptionmardi 10 août 2004StatutMembreDernière intervention14 novembre 2005 14 nov. 2005 à 11:53
Houlala...
Franchement, je te conseille de ne pas te faire ch... avec un int**. Tu
ferais mieux de prendre un int* et d'allouer nbli*nbcol entiers.
Ensuite, tu te définis une macro qui permet d'acceder a l'element
[i,j].
Pour en revenir a ton code source, ta procédure allouer_matrice() travaille sur la variable m qui est un (matrix*) que tu n'as pas alloué...
Ah si, une derniere chose. Quand tu fais un calloc (ou un malloc), tu
utilises la fonction sizeof(). C'est très bien. Mais attention, ce que
tu récupères alors est un (type*). Ainsi, dans ta procédure allouer_matrice(), l'allocation des lignes doit se faire de la manière suivante :