[C++] Segfault à corriger

Segfault à corriger [C++] - C++ - Programmation

Marsh Posté le 08-03-2008 à 11:59:13    

Bonjour,
 
J'aurais besoin de votre aide pour corriger un segfault s-il-vous-plaît.
 
La classe BDD est en fait un B-arbre. La taille du tableau "fils" est de tailleCote. "Dimension" est en quelque sorte la hauteur dans le b-arbre.
Data est un typedef vers un NTL::ZZ (bibliothèque NTL) en gros, considérez que c'est un int.
 
Voici ma classe :

Code :
  1. class BDD {
  2.    int dimension;
  3.    int tailleCote;
  4.    BDD* fils;
  5.    Data* valeur;
  6.  
  7. public:
  8.  
  9.    /**
  10.     * Constructeur
  11.     * @tab Tableau des donnees
  12.     * @param tailleCote Longueur d'un cote d'une dimension
  13.     * @param dimension Nombre de dimension(s).
  14.     */
  15.    BDD(int tailleCote, int dimension = 1);
  16. };


 

Code :
  1. /**
  2. * Constructeur
  3. * @tab Tableau des donnees
  4. * @param tailleCote Longueur d'un cote d'une dimension
  5. * @param dimension Nombre de dimension(s).
  6. */
  7. BDD::BDD(int tailleCote, int dimension):dimension(dimension),tailleCote(tailleCote) {
  8.   if (dimension == 0) {
  9.     valeur = new Data;
  10.     fils = 0;
  11.   }
  12.   else {
  13.    
  14.     for (int i= 0 ; i < tailleCote ; i++) {
  15.       fils[i] = *new BDD(tailleCote,dimension - 1);
  16.     }
  17.    
  18.     valeur = 0;
  19.   }
  20. }


 
Trace GDB :
Dimension de la BDD ?
4
Taille d'une dimension de la base ?
10
 
Program received signal SIGSEGV, Segmentation fault.
0x080503dd in BDD (this=0x8064058, tailleCote=10, dimension=1) at bdd.cpp:44
44       fils[i] = *new BDD(tailleCote,dimension - 1);
(gdb) where
#0  0x080503dd in BDD (this=0x8064058, tailleCote=10, dimension=1)
    at bdd.cpp:44
#1  0x080503d5 in BDD (this=0x8064040, tailleCote=10, dimension=2)
    at bdd.cpp:44
#2  0x080503d5 in BDD (this=0x8064028, tailleCote=10, dimension=3)
    at bdd.cpp:44
#3  0x080503d5 in BDD (this=0xbfc97bf8, tailleCote=10, dimension=4)
    at bdd.cpp:44
#4  0x0804aafa in main () at testPir.cpp:44
 
 
Je vous remercie d'avance pour votre aide :)


Message édité par ekra le 08-03-2008 à 13:03:09
Reply

Marsh Posté le 08-03-2008 à 11:59:13   

Reply

Marsh Posté le 08-03-2008 à 13:59:35    

Quand je lit :
 

Code :
  1. fils[i] = *new BDD(tailleCote,dimension - 1);


 
j'ai quand même envie de vomir.
utilise un std::vector au lieu de tes BDD* qui sentent le sapin air wick

Reply

Marsh Posté le 08-03-2008 à 14:22:08    

Merci pour ton indication.

Reply

Sujets relatifs:

Leave a Replay

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