Segmentation fault <core dumped>

Segmentation fault <core dumped> - C++ - Programmation

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  ;)  
 ;)

Reply

Marsh Posté le 09-10-2002 à 15:43:18   

Reply

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.

Reply

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.


---------------
-@- When code matters more than commercials -@-
Reply

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.

Reply

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.


Message édité par El_gringo le 09-10-2002 à 16:02:38
Reply

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.


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

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


Message édité par tanguy le 09-10-2002 à 16:54:30
Reply

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 !??

Reply

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é


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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

Reply

Marsh Posté le 09-10-2002 à 17:38:55   

Reply

Marsh Posté le 09-10-2002 à 18:13:58    

El_Gringo a écrit a écrit :

 
 
...qui a dit que son prog plantait !??




:lol:
 
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)


Message édité par tanguy le 09-10-2002 à 18:15:12
Reply

Marsh Posté le 09-10-2002 à 18:25:43    

c'est nikel c'est exactement ce k'y me fallait!!!  :jap:  
Merci.

Reply

Marsh Posté le 09-10-2002 à 18:47:24    

c'est koi en fait -ansi ?
ça autorize pas !?:

Code :
  1. new double[3]={1.0, 0.0, 1.0}


Reply

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

Reply

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.




---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 09-10-2002 à 20:34:01    

El_Gringo a écrit a écrit :

 
 
...qui a dit que son prog plantait !??




---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 09-10-2002 à 20:37:40    

peak a écrit a écrit :

c'est koi en fait -ansi ?
ça autorize pas !?:

Code :
  1. new double[3]={1.0, 0.0, 1.0}




Si tu oublies le ';', il n'aime pas.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 10-10-2002 à 01:17:55    

peak a écrit a écrit :

Code :
  1. new double[3]={1.0, 0.0, 1.0}




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 :)


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

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 ?

Reply

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 !? :D

Reply

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 ? :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 11-10-2002 à 10:09:20    

antp a écrit a écrit :

 
 
bah il plantait en quittant donc ? :D




 
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 ! :D

Reply

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 :lol:
 
achete toi l'informatique pour les nuls et apres tu pourras revenir...

Reply

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 :lol:
 
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 !)

Reply

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

Reply

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 !

Reply

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 :


En effet, c'est de la mémoire non désallouée ça.  


 
Maintenant, montre nous un petit programme qui segfault sur un problème de mémoire non desallouée.


Message édité par kadreg le 11-10-2002 à 17:36:06

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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 :
  1. char *p;
  2. p = "Ceci est une litteral donc une constante";
  3. p[3] = 'a'; /*<- Ici il peut y avoir une segmentation fault...*/

Reply

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 :D)


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

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 :D)




 
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...

Reply

Marsh Posté le 11-10-2002 à 17:56:54    

je dirais meme plus , c'est une

Code :
  1. static const char * const


Message édité par Taz@PPC le 11-10-2002 à 17:57:43

---------------
du bon usage de rand [C] / [C++]
Reply

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 ?


Message édité par tanguy le 11-10-2002 à 18:38:39
Reply

Marsh Posté le 11-10-2002 à 18:43:33    

je veux bien prendre les 2 euros


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 11-10-2002 à 18:55:32    

puisqu'il reste que ça, je prends le mars


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-10-2002 à 01:48:27    

Taz@PPC a écrit a écrit :

je dirais meme plus , c'est une

Code :
  1. static const char * const




Ben pas vraiment en fait...

Code :
  1. sizeof("12345" ); //6

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


Message édité par Musaran le 12-10-2002 à 01:49:22

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 12-10-2002 à 09:39:06    

c'étati surtout pour dire des conneries et lancer un troll sur la non-équivalence pointeur - tableau!  :lol:


---------------
du bon usage de rand [C] / [C++]
Reply

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...?))

Reply

Marsh Posté le 15-10-2002 à 17:26:57    

spa des erreurs, c'est des warnings  :o .
 
vas y balance!


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 16-10-2002 à 15:29:14    

En fait c toujour ct'histoire de  

Code :
  1. new double[3]={1.0, 1.0, 1.0}

: en fait j'ai une fonction à lakelle je passe en paramètre un pointeur vers un double donc je fait :  

Code :
  1. void fct(double* p=NULL){}
  2. void main(){
  3. fct(new double[3]={1.0, 1.0, 1.0});
  4. }


 
ça marche marche mais j'ai une 10ène de warnings quand je compile avec "-pedantic".

Reply

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??

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed