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
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
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
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
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
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
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
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]
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
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,
Juste pour info, le prototype de main c'est int main (void), c'est ce qui explique ton warning.
Cdlt,
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
5 déc. 2011 à 12:35
Oui, mais c'est plus court... ;)
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
5 déc. 2011 à 12:43
qu'est-ce qui est plus court ? de taper "void" à la place de "int" ???