[C] Erreur de segmentation
Fermé
Street
-
30 mai 2006 à 20:32
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 31 mai 2006 à 04:09
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 31 mai 2006 à 04:09
A voir également:
- [C] Erreur de segmentation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 38 free ✓ - Forum Mobile
- Erreur 3005 france tv - Forum TV & Vidéo
5 réponses
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
30 mai 2006 à 21:58
30 mai 2006 à 21:58
euh p est un pointeur à mon avis le probleme vient de la.
Salut,
que proposes-tu de faire ?
Il me semble qu'il y a aussi des problèmes au niveau de mes mallocs, comment les corriger?
Merci
que proposes-tu de faire ?
Il me semble qu'il y a aussi des problèmes au niveau de mes mallocs, comment les corriger?
Merci
ollie314
Messages postés
145
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 octobre 2007
80
30 mai 2006 à 23:04
30 mai 2006 à 23:04
Bonjour,
Bon, il y a effectivement un petit problème dans tes allocations.
malloc renvoi un pointeur générique (non typé)
void *malloc(size_t size)
il faut impérativement casté le pointeur de retour !!!
ce qui donne
tab = (char *)malloc(sizeof(char));
et ça devrait fonctionner.
Fais attention, cette définition sous entends que tu réaloues un emplacement mémoire à chaque fois que tu ajoutes un élément dans ton tableau.
Remarque : je ne sais pas ce que c'est que cette allocation :
tab = malloc (size * sizeof * tab);
j'aimerais savoir à quoi sert le size. (tu le déclare dans toutes tes allocations).
Remarque 2 : tres réallocations poseront problème. Pour être ludique je t'invite à aller voir les définitions dans les fichiers d'en tête que tu utilises (les prototypes des fonctions sont dans stdlib.h tu en a aussi dans alloca à voir selon le compilateur utilisé ...)
Bon courage !!
Recontacte si tu buches !
Amicalement
Ollie314
Regarde ce petit tutos exellent :
https://en.wikipedia.org/wiki/Malloc
Bon, il y a effectivement un petit problème dans tes allocations.
malloc renvoi un pointeur générique (non typé)
void *malloc(size_t size)
il faut impérativement casté le pointeur de retour !!!
ce qui donne
tab = (char *)malloc(sizeof(char));
et ça devrait fonctionner.
Fais attention, cette définition sous entends que tu réaloues un emplacement mémoire à chaque fois que tu ajoutes un élément dans ton tableau.
Remarque : je ne sais pas ce que c'est que cette allocation :
tab = malloc (size * sizeof * tab);
j'aimerais savoir à quoi sert le size. (tu le déclare dans toutes tes allocations).
Remarque 2 : tres réallocations poseront problème. Pour être ludique je t'invite à aller voir les définitions dans les fichiers d'en tête que tu utilises (les prototypes des fonctions sont dans stdlib.h tu en a aussi dans alloca à voir selon le compilateur utilisé ...)
Bon courage !!
Recontacte si tu buches !
Amicalement
Ollie314
Regarde ce petit tutos exellent :
https://en.wikipedia.org/wiki/Malloc
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
31 mai 2006 à 04:02
31 mai 2006 à 04:02
Vérifie aussi la priorité de tes opérateurs:
Je ne sais trop ce que ça donne, ya moyen de s'emmêler les pinceaux avec tous ces opérateurs...
=>cop en bas de la page
while ((c = fgetc(fp)) != '\n' && c != EOF)
Je ne sais trop ce que ça donne, ya moyen de s'emmêler les pinceaux avec tous ces opérateurs...
=>cop en bas de la page
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
31 mai 2006 à 04:09
31 mai 2006 à 04:09
En fait en vérifiant pour les opérateurs, je crois que c'est bon.
C'était donc un message inutile :-~
C'était donc un message inutile :-~