Bonsoir,
je doit créer un gestionnaire de signets (URL,description et nombre d'étoile)
Le compilateur me sort une erreur de segmentation, je cherche mais ne trouve pas (le soucis vient d'affiche et erase).
la fonction affiche marche dans la création d'un signet mais pas dans le programme principal, je ne comprend pas du tout pourquoi ! ( je passe bien l'adresse de s donc s est modifié)

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
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
typedef struct _signet{
  char *url;
  char *info;
  int star;
}signet;
 
void init(signet *s){
  s->url=NULL;
  s->info=NULL;
  s->star=0;
}
void saisie(char *url,char *info,int *star){
  printf("saisir une adresse, la description et le nombre d'étoile:");
  scanf("%s %s %d",url,info,star);
}
void affiche(signet s){
  printf("%s\n",s.url);
  printf("%s\n",s.info);
  printf("%d\n",s.star);
}
void ajoute_signet(signet *s,char *url,char *info,int star){
  s=malloc(sizeof(signet));
  s->url=malloc(sizeof(char *)*strlen(url));;
  s->url=url;
  s->info=malloc(sizeof(char *)*strlen(info));
  s->info=info;
  s->star=star;
  /*affiche(*s) marche très bien ici*/
}
 
void erase(signet *s){
  free(s->url);
  free(s->info);
  free(s);
}
 
void modifie_signet(signet *s){
  char url[50];
  char info[50];
  int star;
  saisie(url,info,&star);
  s->url=realloc(s->url,sizeof(char *)*strlen(url));
  s->url=url;
  s->info=realloc(s->info,sizeof(char *)*strlen(info));
  s->info=info;
  s->star=star;
}
int main(void){
  signet s;
  init(&s);
  char url[50];
  char info[50];
  int star;
  saisie(url,info,&star);
  ajoute_signet(&s,url,info,star);
  affiche(s);/*affiche n'inporte quoi*/
  modifie_signet(&s);  
  affiche(s);
  erase(&s);/*erreur invalide pointer*/
  return 0;
}
Meric d'avance pour votre aide.