Fehler beim Zugriff auf letztes Vektorelement



  • Hallo zusammen!

    Ich hab ein Problem mit dem letzten Element von Vektoren.
    Vielleicht kann mir ja einer von euch helfen. 🙄

    class BlockNeighbor{
    	int content;
    	BlockNeighbor *myPartner;
    };
    
    vector<BlockNeighbor> myBlockNeighbors1;
    vector<BlockNeighbor> myBlockNeighbors2;
    
    BlockNeighbor BlockNeighbor1();
    BlockNeighbor BlockNeighbor2();
    
    myBlockNeighbors1.push_back(BlockNeighbor1);
    myBlockNeighbors2.push_back(BlockNeighbor2);
    
    myBlockNeighbors1._Mylast->myPartner = myBlockNeighbors2._Mylast;
    myBlockNeighbors2._Mylast->myPartner = myBlockNeighbors1._Mylast;
    

    Mal von vorne:
    Zuerst erstelle ich 2 BlockNeighbors.
    Dann push ich die in zwei verschiedene Vektoren.

    Das entscheidende ist nun, dass jeder BlockNeighbor einen Zeiger auf einen anderen BlockNeighbor enthält, den ich in den letzten beiden Zeilen im Nachhinein versuche jeweils auf den anderen zu biegen.

    Leider hab ich das Problem, dass _Mylast mir ständig irgendwie ins Nirvana zeigt... 😞

    Oder gäbe es vielleicht sogar noch ne bessere Lösung, als im nachhinein die Zeiger zu verbiegen ??

    Ich hoffe mein Problem ist einigermaßen klargeworden.

    Wäre super wenn mir da einer helfen könnte !! 🙂

    GiantGeorge



  • Was zum Teufel ist _Mylast?



  • Erstmal dürfte _MyLast irgendein implementationsinternes Element des von vector<> sein und zweitens wird der Pointer vermutlich auf vec.end() verweisen, also hinter die echten Daten. Um auf das letzte Element des Vectors zuzugreifen, solltest du besser vec.back() verwenden.



  • ok, danke für die Hinweise!

    Ich glaube ich bin aber gerade auf ein grundsätzliches Problem gestoßen! 😡

    Kann es sein, dass die Elemente im Vektor ständig hin- und hergeschoben werden, obwohl bei meinem Programm eigentlich immer nur Elemente hinten drangehängt werden ??
    Dann würde es nämlich gar keinen Sinn machen, dass der eine Partner auf eine feste Speicheradresse zeigen würde... 😞
    Was macht man denn da ?



  • GiantGeorge schrieb:

    Kann es sein, dass die Elemente im Vektor ständig hin- und hergeschoben werden, obwohl bei meinem Programm eigentlich immer nur Elemente hinten drangehängt werden ??

    Ja, kann durchaus sein - der Vektor legt seine Elemente hintereinander an und wenn der reservierte Speicherbereich nicht mehr ausreicht, holt er sich einen größeren und kopiert alle Elemente um.

    Was macht man denn da ?

    anderen Container verwenden (z.B. deque oder list), vor der Arbeit genügend Platz für alle benötigten Elemente holen lassen (vector::reserve()), das komplette Design neu überdenken,...



  • Ich frage mich, warum du Zugriff auf _Mylast hast, das sollte eigentlich private sein.



  • Vielleicht hat er den Sourcecode vom vector geändert? 😃


  • Mod

    das sieht wie die stdlib msvc++ aus. dort ist alles in vector public, was ja kein problem ist, denn bezeichner, die mit _ und folgendem großbuchstaben beginnen, sind ja sowieso reserviert. also gehen die entwickler wahrscheinlich davon aus, dass jeder programmierer, der weiss, was er tut, ohnehin nicht versehentlich darauf zugreift 😉



  • lol, ich und SourceCode verändern...
    da triffts camper mit seiner Aussage besser ! :p

    Ich hab´s jetzt jedenfalls mit v.back() und davor v.resize(max) gelöst, nicht 100 % sauber, aber den max wert kenn ich.

    Dankeschön, 🙂
    GiantGeorge


Anmelden zum Antworten