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 : 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
 
#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 : 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
#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 : 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
 
#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 :
  1. file.h:14:1: warning: no semicolon at end of struct or union [enabled by default]
    }Queue;

  1. Erreur de segmentation portant sur le printf(" %d ", courant->data); en gras

Merci