jonezy
Messages postés8Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention21 mars 2009
-
19 mars 2009 à 18:52
jonezy
Messages postés8Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention21 mars 2009
-
21 mars 2009 à 00:30
Bonjour,
Je dois ecrire une fonction qui alloue une nouvelle image a partir du fichier fournis en argument.
A l'execution j'ai une "erreur de segmentation".
J'ai du mal avec les fonctions de lecture de fichier, quelques conseils seraient bienvenue.
voici la structure et le code de ma fonction.
typedef struct
{
unsigned long nx;
unsigned long ny;
unsigned long nb_ng;
unsigned char *buff;
} image_t;
image_t *charger_image_pgm(char *nom_fichier){
FILE *fic;
image_t *img;
char buff[TAILLE_BUFF];
fic=fopen(nom_fichier,"r");
if(fic==NULL){
fprintf(stderr,"impossible d'ouvrir le fichier");
return 0;
}
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 20 mars 2009 à 21:38
Salut,
Tu déclare un pointeur du type image_t mais tu ne le fait pointer vers aucun espace mémoire qui t'appartient, En gros, lors de sa déclaration il a pour valeur ... de la merde (ce qui se trouvais autrefosi en mémoire a son emplacement), Or, ce qui se trouve a l'emplacement dont l'adresse est "de la merde", ça a de fortes chance de ne pas être a toi ... et pan segfault !
Bref, il te faut simplement faire un joli malloc (que tu pensera a free dès que tu n'auras plus besoin de la valeur). Ceci corrigé, il te reste une grosse erreur : img->nx et img->ny sont utilisés alors qu'ils ne sont pas initialisés ! Dans l'exemple, je les ai symboliquement mis a 0 car je ne sais pas du tout ce a quoi ils correspondent (je me doute bien qu'ils ne devraient pas être a 0 en temps normal).
jonezy
Messages postés8Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention21 mars 2009 21 mars 2009 à 00:30
Salut
Merci TychoBrahe pour tes corrections, je n'est plus d'erreur de segmentation maintenant j'essaie de charger une photo, d'en faire une copie et de
sauvegarder cette copie, le probleme c'est que les fichiers ne sont pas
identiques la copie est une image toute blanche. Je suis débutant quelques conseils sont les bienvenue.
voici mes codes:
pour creer une image:
image_t *creer_image(){
image_t * img1;