erreur d'allocation mémoire dans une application console C++

erreur d'allocation mémoire dans une application console C++ - C++ - Programmation

Marsh Posté le 28-02-2012 à 18:15:45    

bonjour tous le monde, pendant l’exécution de mon application console avec C++ avec le compilateur cygwin sous netbenas 6.9.1 cet erreur est s'affiche toujoure en fin  :
 
cygdrive/C/program files/netbeans 6.9.1/ide/bin/nativeexecution/dorun.sh: line 33: 5508 aborted <core dumped> sh "{SHFILE}"
 
je fait des teste pour trouver la source d'erreur et je constate que la construction d'un objet qui génère l'erreure mais je ne trouve pas des soucis dans le constructeur.  
SVP si il y'a des idée pour régler ce soucis je vous appréciez beaucoup
 

Reply

Marsh Posté le 28-02-2012 à 18:15:45   

Reply

Marsh Posté le 04-03-2012 à 18:01:31    

soufianee a écrit :

SVP si il y'a des idée pour régler ce soucis je vous appréciez beaucoup


 
ton code

Reply

Marsh Posté le 04-03-2012 à 23:12:57    

ce dessus le code de la classe à partir de quelle généré cet erreur :
 

Code :
  1. #ifndef FUZZIFICATION_H
  2. #define FUZZIFICATION_H
  3. #include "Tlist.h"
  4. #include "Matrice.h"
  5. #include "FCM.h"
  6. #include "RCGA.h"
  7. class Fuzzification
  8. {
  9. private:
  10. cl_Lst<double> donnee;
  11. double *centre;
  12. Matrice u;
  13. int nbrcentre;
  14. int nbrdonnee;
  15. FCM *fcm;
  16.         RCGA *rcga;
  17. double critere;
  18. int m;
  19. public:
  20. Fuzzification(void);
  21. Fuzzification(Fuzzification& );
  22. Fuzzification(cl_Lst<double>&,int);
  23. ~Fuzzification(void);
  24. void setFcm(FCM *);
  25.         void setRcga(RCGA *);
  26. int getNbrcentre();
  27. int getNbrdonnee();
  28. double getCritere();
  29. double getCentre(int);
  30. double getU(int,int);
  31. void operator=(Fuzzification& );
  32. int runFcm();
  33. double calcj(double,double,double,double);
  34. double calculCout();
  35. double minCentre();
  36. void valider();
  37.         void runRCGA();
  38. };
  39. #include "Fuzzification.h"
  40. Fuzzification::Fuzzification(void)
  41. {
  42. m=2;
  43. nbrcentre=0;
  44. nbrdonnee=0;
  45. }
  46. Fuzzification::Fuzzification(cl_Lst<double>& l,int nc)
  47. {
  48. m=2;
  49. nbrdonnee=l.size();
  50.         nbrcentre=nc;
  51. donnee=l;
  52. centre=new double[nbrcentre];
  53. Matrice m(nbrdonnee,nbrcentre);
  54. u=m;
  55. }
  56. Fuzzification::Fuzzification(Fuzzification& f)
  57. {
  58. m=2;
  59.         nbrdonnee=f.getNbrdonnee();
  60. nbrcentre=f.getNbrcentre();
  61. u=f.u;
  62. centre=f.centre;
  63. donnee=f.donnee;
  64. }
  65. Fuzzification::~Fuzzification(void)
  66. {
  67. delete [] centre;
  68. delete &u;
  69. delete &donnee;
  70. }
  71. void Fuzzification::setFcm(FCM *f)
  72. {
  73. fcm=f;
  74. }
  75. void Fuzzification::setRcga(RCGA* r)
  76. {
  77.     rcga=r;
  78. }
  79. int Fuzzification::getNbrcentre()
  80. {
  81. return nbrcentre;
  82. }
  83. int Fuzzification::getNbrdonnee()
  84. {
  85. return nbrdonnee;
  86. }
  87. double Fuzzification::getCritere()
  88. {
  89. return critere;
  90. }
  91. double Fuzzification::getCentre(int i)
  92. {
  93. return centre[i];
  94. }
  95. double Fuzzification::getU(int i,int j)
  96. {
  97. return u(i,j);
  98. }
  99. void Fuzzification::operator=(Fuzzification &f)
  100. {
  101. nbrdonnee=f.getNbrdonnee();
  102. nbrcentre=f.getNbrcentre();
  103. u=f.u;
  104. centre=new double[nbrcentre];
  105. for(int i=0;i<nbrcentre;i++)
  106. {
  107.  centre[i]=f.getCentre(i);
  108. }
  109. donnee=f.donnee;
  110. }
  111. int Fuzzification::runFcm()
  112. {
  113. fcm->initCentre(centre,nbrcentre,donnee.getMin(),donnee.getMax());
  114. fcm->calculDegres(donnee,centre,nbrcentre,u,m);
  115. return fcm->fcmProcessus(donnee,centre,nbrcentre,u,m);
  116. }
  117. void Fuzzification::runRCGA()
  118. {
  119.     rcga->initChr(nbrcentre,centre,donnee.getMin(),donnee.getMax());
  120.     rcga->calcFitness(donnee);
  121.     rcga->sortChromosome();
  122.     rcga->calcPrportion();
  123.     rcga->sortAsProportion();
  124.     rcga->crossover();
  125. }
  126. double Fuzzification::calcj(double u,double m,double x,double c)
  127. {
  128. double p=pow(u,m);
  129. double val=pow(fabs((x-c)),2);
  130. return p*val;
  131. }
  132. double Fuzzification::calculCout()
  133. {
  134. double som=0;
  135. double som2=0;
  136. for (int j=0;j<nbrcentre;j++)
  137.  {
  138.   som=0;
  139.   for(int i=0;i<nbrdonnee;i++)
  140.      {
  141.    som+=pow(u(i,j),m)*pow(fabs(donnee[i]-centre[j]),2);
  142.   }
  143.   som2+=som;
  144.    }
  145. return som2;
  146. }
  147. double Fuzzification::minCentre()
  148. {
  149. double min=fabs(centre[0]-centre[1]);
  150. double temp;
  151. for(int i=0;i<nbrcentre;i++)
  152. {
  153.  for(int j=(i+1);j<nbrcentre;j++)
  154.  {
  155.   temp=fabs(centre[i]-centre[j]);
  156.   if(temp<min) min=temp;
  157.  }
  158. }
  159. return pow(min,2);
  160. }
  161. void Fuzzification::valider()
  162. {
  163. critere=calculCout()/(nbrdonnee*minCentre());
  164. }
  165. #endif /* FUZZIFICATION_H */

Reply

Marsh Posté le 05-03-2012 à 11:58:55    

delete &u;
delete &donnee;

Ces delete ne correspondent pas à des new. Et comme les delete sont souvent à l'origine de core dump, voir si ça ne marcherait pas mieux sans eux.

Reply

Marsh Posté le 05-03-2012 à 22:50:00    

Par ailleurs tu as des delete ton ton destructeur, alors que ton constructeur de copie ne copie que les adresses.
 
Tu vas donc potentiellement faire deux fois delete sur la même adresse, dès que tu aura copié ton objet et lorsque le second sera détruit => core dump.
 
 

Reply

Marsh Posté le 08-03-2012 à 02:07:51    

Merci beaucoup pour vos réponses    :sol:  ça marche bien quand je commenter le code de destructeur.
Mais comment coder mon destructeur sont revient ces erreurs.  :heink:

Reply

Marsh Posté le 08-03-2012 à 07:34:58    

on n'alloue pas la memoire a la rache en c++ : std::vector est la pour ca.
 
google sur :
 
RAII
std::vector
Forme canonique de Coplien

Reply

Marsh Posté le 08-03-2012 à 18:15:24    

merci bcp pour tes indications :) je vais googler tout de suite la dessus

Reply

Sujets relatifs:

Leave a Replay

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