Pregunta

Quiero convertir una lista (enlazada simple) en una lista de omisión que se deriva de una lista vinculada.Dentro del ctor de conversión que obtiene una lista (enlazada) como parámetro, obtengo un desbordamiento de pila en *.Solo llamo a ese ctor desde main una vez.¿Cómo es posible que se llame a la nueva SkipList en bucle?

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();
        }
    };
¿Fue útil?

Solución

Debe revisar sus reglas básicas de C++ sobre la creación de objetos dinámicos. new llama al constructor del objeto que estás creando.Llamando new object en el constructor para object, obtienes un bucle infinito (recursividad infinita, en realidad) que no deja más espacio en la pila.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top