Doppelt Verlinkte Liste {Elemente Gehen Verloren}
-
die liste funzt mit genau einem element, aber wenn ich mehrere hinzufüge klappt das schon nicht mehr
hab auch fehlersuche betrieben und hier mein resultat:main.cpp
#include <iostream> #include <fstream> #include "log.h" #include "list.h" #define MAIN_VERSION 0 #define APP_TITLE "ListTest" using namespace std; int main(int argc, char* argv[]){ std::cout << APP_TITLE"\n"; Log logObj("logFile.txt", "errFile.txt"); logObj.pLn("test1"); logObj.logLn("test2"); logObj.logLn("test3"); logObj.logLn("test4"); List xl; Element elem("value1"); xl.pushFront(&elem); elem.setValue("value2"); xl.pushFront(&elem); elem.setValue("value3"); xl.pushFront(&elem); elem.setValue("value4"); xl.pushFront(&elem); std::cout << (*(xl.popBack())).getValue() << "\n"; std::cout << (*(xl.popBack())).getValue() << "\n"; std::cout << (*(xl.popBack())).getValue() << "\n"; std::cout << (*(xl.popBack())).getValue() << "\n"; //block until user types something fgetc(stdin); return 0; }
list.cpp
#include <iostream> #include <fstream> #include "list.h" using namespace std; // constructor List::List(){ first= NULL; last= NULL; size= 0; } // destructor List::~List(){ first= NULL; last= NULL; size= 0; } void List::pushFront(Element *elem){ Element newElem((*elem).getValue()); std::cout << "new element pos: " << &newElem << "\n"; Element *tmp= &newElem; size++; if(first==NULL){ first= tmp; last= tmp; (*tmp).setNext(NULL); (*tmp).setPrev(NULL); return; } (*tmp).setNext(first); (*first).setPrev(tmp); (*tmp).setPrev(NULL); first= tmp; } void List::pushBack(Element *elem){ size++; if(first==NULL){ first= elem; last= elem; (*elem).setNext(NULL); (*elem).setPrev(NULL); return; } (*first).setNext(elem); (*elem).setPrev(first); (*elem).setNext(NULL); last= elem; } Element* List::popFront(){ if(size==0) return NULL; Element *result= first; if(size==1){ first= NULL; last= NULL; }else{ first= (*first).getNext(); (*first).setPrev(NULL); } (*result).setNext(NULL); (*result).setPrev(NULL); size--; return result; } Element* List::popBack(){ if(size==0) return NULL; Element *result= last; if(size==1){ first= NULL; last= NULL; }else{ last= (*last).getPrev(); (*last).setNext(NULL); } (*result).setNext(NULL); (*result).setPrev(NULL); size--; return result; }
element.cpp
#include <iostream> #include "element.h" using namespace std; Element::Element(){ } Element::Element(std::string value){ setValue(value); setNext(NULL); setPrev(NULL); } void Element::setPrev(Element *p){ prev= p; } Element* Element::getPrev(){ return prev; } void Element::setNext(Element *n){ next= n; } Element* Element::getNext(){ return next; } void Element::setValue(std::string val){ value= val; } std::string Element::getValue(){ return value; } int Element::compareTo(std::string value2) { return value>value2; } void Element::swapElems(Element *e1, Element *e2){ std::string tmp((*e1).getValue()); (*e1).setValue((*e2).getValue()); (*e2).setValue(tmp); }
das Problem:
bei der pushFront methode wird dem neuen Element immer wieder der alte platz zugewiesen,D:\workspace\ListC>main ListTest test1 new element pos: 0x22fdf0 new element pos: 0x22fdf0 new element pos: 0x22fdf0 new element pos: 0x22fdf0
dann gibt es eine exception bei
(*last).setNext(NULL);
in der popBack methode, da last in der Zeile auf NULL zeigtes werden also irgendwie keine kopien von den elementen angelegt
hoffe mal das ihr mir da wieder helfen könnt