Segmentation fault <core dumped> - C++ - Programmation
Marsh Posté le 09-10-2002 à 15:49:58
Tu utilises la fonction printf ???? C'est un grand classique : elle fait tres souvent planter les programmes.
Marsh Posté le 09-10-2002 à 15:58:21
core dumped : c'est général un problème de pointeur ou d'allocation de mémoire.
Marsh Posté le 09-10-2002 à 16:01:54
manu025 a écrit a écrit : core dumped : c'est général un problème de pointeur ou d'allocation de mémoire. |
En effet, c'est de la mémoire non désallouée ça.
Si t en C, c'est un (ou des) malloc (ou autre allocoïde) sans free correspondant.
Si t en C++, c'est un (ou des) new sans delete correspondant.
Marsh Posté le 09-10-2002 à 16:02:14
_Mac_ a écrit a écrit : Tu utilises la fonction printf ???? C'est un grand classique : elle fait tres souvent planter les programmes. |
Non.
Quand on l'utilise mal, peut être !
Mais si printf était buggé, on l'saurait.
Marsh Posté le 09-10-2002 à 16:19:47
El_Gringo a écrit a écrit : En effet, c'est de la mémoire non désallouée ça. Si t en C, c'est un (ou des) malloc (ou autre allocoïde) sans free correspondant. Si t en C++, c'est un (ou des) new sans delete correspondant. |
c'est souvent des ABR/ABW (array boudary Write/Read), voir des UMR (unitialized memory read) qui cause problème.
Marsh Posté le 09-10-2002 à 16:27:27
El_Gringo a écrit a écrit : En effet, c'est de la mémoire non désallouée ça. Si t en C, c'est un (ou des) malloc (ou autre allocoïde) sans free correspondant. Si t en C++, c'est un (ou des) new sans delete correspondant. |
nan de la memoire non desallouee ne fait pas planter un programme, ca fait simplement une fuite memoire
pour eviter les fuites memoire on utilise pas un debuggeur mais un memory checker ou leak checker
un segfault peut etre causer par pleins de choses, mais en general c'est simplement par exemple :
int tab[12]
et ensuite on fait int i = tab[50]
pof segfault
donc pour comprendre c'est tres simple, tu prends gdb le debuggeur
tu le lances avec en parametre le nom de ton programme dans le meme repertoire (en compilant bien sur le programme avec l'option -g pour debug)
tu fais run et il va t'afficher la derniere instruction qui a fait plante le programme (si t'as de la chance)
ensuite tu fais up pour remonter dans la pile d'appels et voir tout ce qui c'est passe
si t'as pas de chance et qu'il n'y a pas de pile (t'inquiete ca sera pas ton cas), tu fou un break point la juste avant ou tu penses que tu as fait une erreur de programmation et puis des step et des next jusqu'au moment fatidique
bon moi j'utilise DDD sous unix, mais avec gdb sous windows ou dev-c++ c'est le meme principe meme si je peux pas donner la demarche exacte
edit :
j'oubliais, compile tes programmes avec :
-Wall -pedantic -ansi -g
ca t'afficheras beaucoup plus de warnings et donc de trouver des bugs potentiels plus facilement
et utiliser un memory checker aussi c'est une bonne idee, sous cygwin je sais pas
mais c'est linux y'en a des dizaines, le plus simple a utiliser c'est memprof, le plus puissant c'est valgrind
Marsh Posté le 09-10-2002 à 17:29:28
tanguy a écrit a écrit : nan de la memoire non desallouee ne fait pas planter un programme, ca fait simplement une fuite memoire |
...qui a dit que son prog plantait !??
Marsh Posté le 09-10-2002 à 17:35:50
El_Gringo a écrit a écrit : ...qui a dit que son prog plantait !?? |
Je connais pas beaucoup de programme encore vivant après avoir coredumpé
Marsh Posté le 09-10-2002 à 17:38:55
kadreg a écrit a écrit : Je connais pas beaucoup de programme encore vivant après avoir coredumpé |
+1
Marsh Posté le 09-10-2002 à 18:13:58
El_Gringo a écrit a écrit : ...qui a dit que son prog plantait !?? |
enfin vert quand meme parceque vraiment le niveau est bien bas, la question de peak est celle d'un debutant et en moins de 10 reponses y'a deja 3 conneries :
- l'histoire du printf
- une nouvelle definition des fuites memoires
- des programmes qui segfault sans planter
les gars si vous connaissez pas la reponse ayez la gentillesse de ne pas repondre pour ne pas induire en erreur les gens (peak + tout ceux qui lisent le topic), c'est la moindre des choses
ca arrive a tout le monde de dire des conneries mais y'a des limites ! (et la elles ont ete explosees, champion du monde)
Marsh Posté le 09-10-2002 à 18:47:24
c'est koi en fait -ansi ?
ça autorize pas !?:
Code :
|
Marsh Posté le 09-10-2002 à 18:49:21
peak a écrit a écrit : c'est koi en fait -ansi ? |
ca force a respecter la norme ansi
Marsh Posté le 09-10-2002 à 20:33:19
_Mac_ a écrit a écrit : Tu utilises la fonction printf ???? C'est un grand classique : elle fait tres souvent planter les programmes. |
Marsh Posté le 09-10-2002 à 20:34:01
El_Gringo a écrit a écrit : ...qui a dit que son prog plantait !?? |
Marsh Posté le 09-10-2002 à 20:37:40
peak a écrit a écrit : c'est koi en fait -ansi ? ça autorize pas !?:
|
Si tu oublies le ';', il n'aime pas.
Marsh Posté le 10-10-2002 à 01:17:55
peak a écrit a écrit :
|
Triple hélas!
En C++ standard, on ne peut initialiser les éléments de tableaux issus de new.
Le type doit donc disposer d'un constructeur par défaut.
Il faut leur affecter une valeur après.
Soyons patients, ça viendra.
el_Gringo a écrit a écrit : allocoïde |
Oh ! Une nouvelle espèce dans mon bestiaire
Marsh Posté le 11-10-2002 à 09:15:58
Bon, j'ai déja eu des "core dumped" du à de la mémoire non-désalouée. En effet, ça faisait pas planter le programme, mais, au moment ou je le quittait, dans la console s'affichait : "core dumped".
Alors, tanguy, p'tit con, tu crois que tu sais tout, c bien. Mais rappels toi que tout le monde peut se planter (hé oui, même toi si ça s'trouve !), et que si on répondait QUE quand c'est sur à 100% que la réponse soit LA réponse, on avancerai pas beaucoup. Le plus souvent, c'est des hypothèses qui font avancer les choses.
"tanguy", tu t'appellerais pas Yann par hasard ?
Marsh Posté le 11-10-2002 à 09:16:44
Musaran a écrit a écrit : Oh ! Une nouvelle espèce dans mon bestiaire |
Pourquoi !? J'trouve que ça sonne bien "allocoïde", non !?
Marsh Posté le 11-10-2002 à 10:01:05
El_Gringo a écrit a écrit : En effet, ça faisait pas planter le programme, mais, au moment ou je le quittait, dans la console s'affichait : "core dumped". |
bah il plantait en quittant donc ?
Marsh Posté le 11-10-2002 à 10:09:20
antp a écrit a écrit : bah il plantait en quittant donc ? |
Ouais, enfin, c vrai qu'on peut toujours philosopher sur le sens du terme "planter". Moi j'dirais que c'est un comportement qui empêche le bon fonctionnement d'un soft. Qu'il quitte quand on quitte, j'trouve pas ça trop néfaste !
Marsh Posté le 11-10-2002 à 16:08:19
El_Gringo a écrit a écrit : Bon, j'ai déja eu des "core dumped" du à de la mémoire non-désalouée. En effet, ça faisait pas planter le programme, mais, au moment ou je le quittait, dans la console s'affichait : "core dumped". Alors, tanguy, p'tit con, tu crois que tu sais tout, c bien. Mais rappels toi que tout le monde peut se planter (hé oui, même toi si ça s'trouve !), et que si on répondait QUE quand c'est sur à 100% que la réponse soit LA réponse, on avancerai pas beaucoup. Le plus souvent, c'est des hypothèses qui font avancer les choses. "tanguy", tu t'appellerais pas Yann par hasard ? |
J'ai le droit de m'en faire mon boulet officiel ?
parceque je crois que j'ai trouve mon champion du moment
achete toi l'informatique pour les nuls et apres tu pourras revenir...
Marsh Posté le 11-10-2002 à 16:41:21
tanguy a écrit a écrit : J'ai le droit de m'en faire mon boulet officiel ? parceque je crois que j'ai trouve mon champion du moment achete toi l'informatique pour les nuls et apres tu pourras revenir... |
une question : pourquoi tu dit ça ?
parce que j'te traite de petit con ?
Non, parce que, j'ai pas l'impression d'avoir dit d'abération. Pour ce que j'ai dit à propos de "core dumped", lis le topic, et vois pourquoi j'ai dit ça (cf mon cas !)
Marsh Posté le 11-10-2002 à 16:57:04
El_Gringo a écrit a écrit : une question : pourquoi tu dit ça ? parce que j'te traite de petit con ? Non, parce que, j'ai pas l'impression d'avoir dit d'abération. Pour ce que j'ai dit à propos de "core dumped", lis le topic, et vois pourquoi j'ai dit ça (cf mon cas !) |
parceque t'as dis des conneries de A a Z, c'est tout, y'a meme pas a disserter la dessus
quand a ton insulte de "petit con" venant d'un gars qui sait meme pas ce que c'est un segfault et qui s'obstine dans sa connerie, ca me fait une belle jambe
si j'etais toi, pour mon amour propre, j'effacerais vite fais mes posts, parceque c'est pas une etouderie ce que tu viens d'ecrire, mais la preuve manifeste que tu n'y connais rien du tout et ne pas le reconnaitre et insulter les gens, c'est pas un manque de connaissance dans un domaine, c'est de la debilite pronfonde
moi je suis nul en cuisine, ba je vais pas insulter les gars sur les forums de cuisine en leur expliquant que les crepes ca se fait sans lait
Marsh Posté le 11-10-2002 à 17:27:49
tanguy a écrit a écrit : parceque t'as dis des conneries de A a Z, c'est tout, y'a meme pas a disserter la dessus quand a ton insulte de "petit con" venant d'un gars qui sait meme pas ce que c'est un segfault et qui s'obstine dans sa connerie, ca me fait une belle jambe si j'etais toi, pour mon amour propre, j'effacerais vite fais mes posts, parceque c'est pas une etouderie ce que tu viens d'ecrire, mais la preuve manifeste que tu n'y connais rien du tout et ne pas le reconnaitre et insulter les gens, c'est pas un manque de connaissance dans un domaine, c'est de la debilite pronfonde moi je suis nul en cuisine, ba je vais pas insulter les gars sur les forums de cuisine en leur expliquant que les crepes ca se fait sans lait |
...J'persiste : quelle connerie j'ai dit ? (j'estime m'y connaitre un minimum en info !)
sur ce je pars en week end !
Marsh Posté le 11-10-2002 à 17:32:51
El_Gringo a écrit a écrit : ...J'persiste : quelle connerie j'ai dit ? (j'estime m'y connaitre un minimum en info !) |
Citation : |
Maintenant, montre nous un petit programme qui segfault sur un problème de mémoire non desallouée.
Marsh Posté le 11-10-2002 à 17:40:26
joce a écrit a écrit : c'est souvent des ABR/ABW (array boudary Write/Read), voir des UMR (unitialized memory read) qui cause problème. |
Il me semble que tenter de modifier une constante peut avoir ce resultat également :
Code :
|
Marsh Posté le 11-10-2002 à 17:48:41
Pour qu'elle raison (vu que l'espace mémoire pour la constante est bien alloué ?). (c'est là qu'il faut mieux déclaré p comme un const char * histoire de pas avoir de surprise )
Marsh Posté le 11-10-2002 à 17:56:38
joce a écrit a écrit : Pour qu'elle raison (vu que l'espace mémoire pour la constante est bien alloué ?). (c'est là qu'il faut mieux déclaré p comme un const char * histoire de pas avoir de surprise ) |
J'ai dit que c'etait possible, ca depend de la machine me semble-t-il...
La raison, elle est simple, la chaine peut etre stockée dans un segment "read-only", y ecrire provoque donc une faute de segmentation...
Marsh Posté le 11-10-2002 à 18:38:07
El_Gringo a écrit a écrit : ...J'persiste : quelle connerie j'ai dit ? (j'estime m'y connaitre un minimum en info !) |
genre je vais perdre du temps a expliquer a un cretin qui me traite de "ptit con" pourquoi il a rien compris a l'informatique alors qu'il s'estime pas mauvais
un mars et 2euros aussi ?
Marsh Posté le 11-10-2002 à 18:43:33
je veux bien prendre les 2 euros
Marsh Posté le 11-10-2002 à 18:55:32
puisqu'il reste que ça, je prends le mars
Marsh Posté le 12-10-2002 à 01:48:27
Taz@PPC a écrit a écrit : je dirais meme plus , c'est une
|
Ben pas vraiment en fait...
Code :
|
C'est d'abord un tableau, l'aspect pointeur ne survient qu'après "décomposition".
C'est bien une classe d'allocation statique (comme les globales), mais pas "static" dans le sens de local à l'unité de compilation.
J'avais essayé d'être exhaustif ici: http://www.developpez.net/forums/v [...] 531#172531
Marsh Posté le 15-10-2002 à 17:21:38
Les gars c'est trop cool de vous entre tuer comme ça pour moi!!mais j'ai resolut le prob!
Merci à tous.
ps: c'est surtout le post de Tanguy ki à tous tué (claire, precis et constructif)
(-Wall -g -ansi : trop pratike pour trouver des erreurs, mais -pedantic me detect 20 erreurs alors ke mon prog marche...?))
Marsh Posté le 16-10-2002 à 15:29:14
En fait c toujour ct'histoire de
Code :
|
: en fait j'ai une fonction à lakelle je passe en paramètre un pointeur vers un double donc je fait :
Code :
|
ça marche marche mais j'ai une 10ène de warnings quand je compile avec "-pedantic".
Marsh Posté le 16-10-2002 à 21:07:03
Musaran a écrit a écrit : Triple hélas! En C++ standard, on ne peut initialiser les éléments de tableaux issus de new. Le type doit donc disposer d'un constructeur par défaut. Il faut leur affecter une valeur après. Soyons patients, ça viendra. |
Mais pourkoi c'est ke des warnings et pas des erreurs alors??
Marsh Posté le 09-10-2002 à 15:43:18
Je compile un code (g++ avec cygwin) et il detect pas d'erreurs mais au moment ou je l'execute tous ce passe bien jusk'à ce k'y m'affiche : Segmentation fault <core dumped>
Et c'est pas facile de trouver une erreure avec si peux d'info., si k'elk'un sais m'en dire plus??! style à koi ce peux être dû, comment avoir des infos supplementair sur l'erreur (comment avoir acces au "dump" )... se serai cool