Segmentaiton fault C

Fermé
wazaaaa - 4 déc. 2011 à 08:59
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 5 déc. 2011 à 12:43
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/

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
Modifié par fiddy le 4/12/2011 à 10:39
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
1
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
4 déc. 2011 à 10:41
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
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]

0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
4 déc. 2011 à 10:45
Bonjour jisisv,
Juste pour info, le prototype de main c'est int main (void), c'est ce qui explique ton warning.
Cdlt,
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
5 déc. 2011 à 12:35
Oui, mais c'est plus court... ;)
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
5 déc. 2011 à 12:43
qu'est-ce qui est plus court ? de taper "void" à la place de "int" ???
0