Question

Je souhaite convertir une liste (simple liée) en une liste de sauts dérivée d'une liste chaînée.À l'intérieur du cteur de conversion qui obtient une liste (liée) comme paramètre, j'obtiens un stackoverflow au niveau *.Je viens d'appeler ce cteur depuis le principal une fois.Comment est-il possible que la nouvelle SkipList soit appelée en boucle ?

class SkipList : public List {
public:     
    SkipList(SkipListEl* first) : List (first){};

    SkipList(const List& sl){                           
        ListEl* fst = sl.getFirst();
        new SkipList(fst);         // * <- stackoverflow

        while(fst->hasNext()){
            new SkipListEl(*fst);
            fst = fst->getNext();
        }
    };
Était-ce utile?

La solution

Vous devez revoir vos règles de base C++ sur la création d'objets dynamiques. new appelle le constructeur de l'objet que vous créez.En appelant new object dans le constructeur pour object, vous obtenez une boucle infinie (récursivité infinie, en fait) ne conduisant à plus d'espace de pile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top