Votre question

lecture fichier en c

Tags :
  • Programmation
Dernière réponse : dans Programmation
10 Mai 2007 12:32:51

Voila j'ai une erreur de segmentation a l'execution avec ce code :

#include <stdio.h>
#include <stdlib.h>
#include "lecture_fichier.h"

int taillematrice;
int** mat;

void lecture_fichier(char* nom_fichier){

FILE* f=fopen(nom_fichier,"r");
if (f != NULL){
fscanf(f,"%d",&taillematrice);
printf("La matrice est de taille %d\n",taillematrice);
int i,j;
mat=(int **)malloc(sizeof(int*)*taillematrice);
printf("");
for (i=0;i<taillematrice;i++){
mat=malloc(sizeof(int)*taillematrice);
//printf("sommet %d",i);
}
printf("\n");
//Recuperation par ligne
for(j=0;j<taillematrice;j++){
for (i=0;i<taillematrice;i++){
fscanf(f,"%d",&mat[j]);
printf("%d\t",mat[j]);
}
printf("\n");
}//////////////////////////////////////////////printf("fonction lecture finie");
int n=fclose(f);
if (n!=0){printf("le fichier n'est pas fermer");}
}
else{
printf("Impossible d'ouvrir le fichier");
}
}

avec en param de cette fonction le fichier avec ceci a l'interieur

10
0 0 0 0 0 0 0 0 0 0
0 0 0 4 4 4 0 0 0 0
0 0 0 0 0 0 0 0 10 0
0 0 0 0 0 0 6 0 0 0
0 0 0 0 0 0 2 2 0 0
0 0 0 0 0 0 0 0 11 0
0 0 0 0 0 0 0 0 0 22
0 0 0 0 0 0 0 0 3 0
0 0 0 0 0 0 0 0 0 17
0 0 0 0 0 0 0 0 0 0

Merci

Autres pages sur : lecture fichier

10 Mai 2007 18:28:05

BOUHHHHH les variables globales !!!! :) 

résultats:
  1. int lecture_fichier(char* nom_fichier)
  2. {
  3.  
  4. FILE* f=fopen(nom_fichier,"r" );
  5. if (f != NULL)
  6. {
  7. fscanf(f,"%d",&taillematrice);
  8. printf("La matrice est de taille %d\n",taillematrice);
  9. }
  10. else
  11. return 0;
  12.  
  13. int i,j;
  14. mat=(int **)malloc(sizeof(int*)*taillematrice);
  15. printf("" );
  16. for (i=0;i<taillematrice;i++)
  17. mat[i]=(int *)malloc(sizeof(int)*taillematrice);
  18.  
  19. for(j=0;j<taillematrice;j++)
  20. {
  21. for (i=0;i<taillematrice;i++)
  22. {
  23. fscanf(f,"%d",&mat[j][i]);
  24. printf("%d\t",mat[j][i]);
  25. }
  26. }
  27. return 1;
  28. }

j'ai juste changé la ligne suivante..
mat=malloc(sizeof(int)*taillematrice);
EN:
mat=(int *)malloc(sizeof(int)*taillematrice);

pour bien initialiser en tableau de int.
apres, ton fscanf avec un %d sur un tableau (initialisé en void*) par le malloc (d'ailleurs refusé par mon compilateur sans le cast!) aura posé problème.

Résultat de l'éxecution:


[manuel@manulinux src]$ g++ fich.cpp -o fich
[manuel@manulinux src]$ ./fich
La matrice est de taille 10
0 0 0 0 0 0 0 0 0 0 00 0 4 4 4 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 00 0 0 6 0 0 0 0 0 0 00 0 2 2 0 0 0 0 0 0 00 0 0 11 0 0 0 0 0 0 00 0 0 22 0 0 0 0 0 0 00 3 0 0 0 0 0 0 0 0 00 17 0 0 0 0 0 0 0 0 00
[manuel@manulinux src]$ vi toto.txt

Ps: ne tiens pas compte de la mise en page du résultat, c'est ce foutu système qui la détraque, le resultat est conforme au programme!
10 Mai 2007 22:57:57

mici mici jmen va verifier ca
Contenus similaires
11 Mai 2007 14:07:30

ben ca marche pas toujours une erreur de segmentation
Et je viens de voir que tu compiler en c++

C'est un projet de C !!!!!!!

T'aurais pas une autre idée????
11 Mai 2007 17:58:37

je fais manger mon fils et le couche, puis je regarde.. :) 

c'est drole quand meme, ca le fait marrer (il a 7 mois) de me voir taper au clavier ... :) 

vu qu'il est court comme programme, t'a essayé de le faire fonctionner en pas à pas , pour voir où il plante ?

montre moi aussi ton main.

si tu veux/peux pas, MP le moi
11 Mai 2007 18:56:13

j'ai fais 1 copié collé de ton source dans un fic.c,
j'ai rajouté un

int main()
{
lecture_fichier("toto.txt");
return 1;
}

puis:

[manuel@manulinux src]$ cc fic.c -o fic
[manuel@manulinux src]$ ./fic
La matrice est de taille 10

0 0 0 0 0 0 0 0 0 0
0 0 0 4 4 4 0 0 0 0
0 0 0 0 0 0 0 0 10 0
0 0 0 0 0 0 6 0 0 0
0 0 0 0 0 0 2 2 0 0
0 0 0 0 0 0 0 0 11 0
0 0 0 0 0 0 0 0 0 22
0 0 0 0 0 0 0 0 3 0
0 0 0 0 0 0 0 0 0 17
0 0 0 0 0 0 0 0 0 0
[manuel@manulinux src]$

comme tu vois, pas de problème:
1: montre moi ton main
2: montre moi tes options de configuration, voire ton makefile.


13 Mai 2007 21:00:16

ok c'est bon ca tourne maintenant merci beaucoup
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS