Segmentaiton fault C
wazaaaa
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai un probleme quand j'essaie de lire ce qui suit :
char *buffer;
printf("tapez quelques chose")
scanf("%s", buffer):
des que je tape quelques chose pour la lecture j'ai cette erreur ''Segmentation default''
pourtant ça travaille tres bien sur mon premier pc mais pas sur le deuxieme, je suis sur ubuntu avec gcc/
j'ai un probleme quand j'essaie de lire ce qui suit :
char *buffer;
printf("tapez quelques chose")
scanf("%s", buffer):
des que je tape quelques chose pour la lecture j'ai cette erreur ''Segmentation default''
pourtant ça travaille tres bien sur mon premier pc mais pas sur le deuxieme, je suis sur ubuntu avec gcc/
A voir également:
- Segmentaiton fault C
- Zsh: segmentation fault ✓ - Forum Programmation
- Scanf segmentation fault ✓ - Forum Programmation
- [Langage C] segmentation fault ✓ - Forum C
- Segmentation fault - Forum Programmation
- Wer fault - Forum Windows 10
2 réponses
Bonjour,
Tu n'as rien alloué, le segfault est donc tout à fait normal.
Lorsque tu fais char *buffer, cela créé un pointeur mais il pointe sur rien.
Il faut le faire pointer sur une zone mémoire avec malloc.
Par exemple buffer=malloc(50);
Et avant la fin du programme : free(buffer);
Ou tu peux faire directement : char buffer[50];
Dans ce cas, il ne faudra pas dépasser la phrase de 49 caractères.
Cdlt,
Google is your friend
Tu n'as rien alloué, le segfault est donc tout à fait normal.
Lorsque tu fais char *buffer, cela créé un pointeur mais il pointe sur rien.
Il faut le faire pointer sur une zone mémoire avec malloc.
Par exemple buffer=malloc(50);
Et avant la fin du programme : free(buffer);
Ou tu peux faire directement : char buffer[50];
Dans ce cas, il ne faudra pas dépasser la phrase de 49 caractères.
Cdlt,
Google is your friend
C'est normal. Tu écris dans la zone mémoire pointée par buffer.
Or ce pointeur n'est pas initialisé, d'où écriture dans une zone aléatoire.
Réserve un buffer statique ou dynamique.
exemple
Or ce pointeur n'est pas initialisé, d'où écriture dans une zone aléatoire.
Réserve un buffer statique ou dynamique.
exemple
johand@osiris: ~/src/CCM/C $ cat segfault.c # include <stdio.h> void main(void) { char buffer[10]; printf("tapez quelques chose "); scanf("%9s", buffer); printf("You wrote %s\n", buffer); } johand@osiris: ~/src/CCM/C $ gcc -Wall -o segfault segfault.c segfault.c:3:6: warning: return type of `main' is not `int' [-Wmain]