conversion de liste chaînée C++ en liste de sauts
-
11-12-2019 - |
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();
}
};
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