Erreur de segmentation sur une file
Bonjour,
J'essaie de créer une file en c et je bloque à cause d'une erreur que je ne comprend pas.
Quelqu'un saurait il d'où vient le problème ?
Voici le code :
file.h
Code:
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
|
#ifndef FILE_H
#define FILE_H
typedef struct tagQueueElt{
int data;
struct tagQueueElt* next;
}QueueElt;
typedef struct tagQueue{
QueueElt* first;
QueueElt* last;
int size
}Queue;
// Initialisation de la file
void initialization(Queue*);
//Taille de la file
int size(Queue*);
//Ajout d'un élément dans la file
int push(Queue*, int);
//Supression du premier élément de la file
int pop(Queue*);
//Affichage de la liste
void affiche(Queue*);
#endif |
file.c
Code:
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
|
#include <stdlib.h>
#include <stdio.h>
#include "file.h"
// Initialisation de la file
void initialization(Queue* file){
file->first = NULL;
file->last = NULL;
file->size = 0;
}
//Taille de la file
int size(Queue* file){
return file->size;
}
//Ajout d'un élément dans la file
int push(Queue* file, int data){
QueueElt* newelt;
if ((newelt = (QueueElt*) malloc (sizeof (QueueElt))) == NULL)
return -1;
newelt->data = data;
QueueElt* courant = file->first;
if(courant == NULL){
file->last = newelt;
newelt->next = file->first;
file->first = newelt;
}else{
if(courant->next == NULL){
file->last = newelt;
newelt->next = courant->next;
courant->next = newelt;
}
else{
file->last->next = newelt;
newelt->next = NULL;
}
}
file->size++;
return 0;
}
//Supression du premier élément de la file
int pop(Queue* file){
QueueElt* eltsupp;
if (file->size == 0)
return -1;
eltsupp = file->first;
file->first = file->first->next;
free(eltsupp);
file->size--;
return 0;
}
//Affichage de la liste
void affiche(Queue* file){
QueueElt* courant = malloc(sizeof(QueueElt));
int i;
courant = file->first;
for(i = 0 ; i < file->size ; i++){
printf(" %d ", courant->data);
courant = courant->next;
}
} |
Le test
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#include <stdlib.h>
#include <stdio.h>
#include "file.h"
int main(){
Queue* file = malloc(sizeof (Queue*));
printf("taille de file vide : %d\n", size(file));
push(file,10);
push(file,20);
push(file,30);
push(file,40);
push(file,50);
affiche(file);
printf("\n");
pop(file);
affiche(file);
printf("\n");
} |
J'obtient 2 erreurs :
- file.h:14:1: warning: no semicolon at end of struct or union [enabled by default]
}Queue;
- Erreur de segmentation portant sur le printf(" %d ", courant->data); en gras
Merci