conversión de lista enlazada de c++ a lista de omisión
-
11-12-2019 - |
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();
}
};
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