Einfach verkettete Liste

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Einfach verkettete Liste

    Hallo, Ich habe ein Problem bei meiner meinem cpp file.
    ich scheine an nun schon bei der Eingabe der Parameter Interpret und Titel auf mir nicht zugestellten speicher zugreifen zu wollen.

    C-Quellcode

    1. Quellcode
    2. #include "stdafx.h"
    3. #include <iostream>
    4. #include <string>
    5. using namespace std;
    6. #include "Verkettete Listen.h"
    7. #include <fstream>
    8. C_CDRom* newobject = new C_CDRom;
    9. C_CDRom* C_CDRom::getNext()
    10. {
    11. return next;
    12. }
    13. void C_Regal::CDsReinstellenNachLetzerPos(string sInterpret, string sTitel)
    14. {
    15. if (root == NULL)
    16. {
    17. root = new C_CDRom;
    18. root->SetInterpret( sInterpret );
    19. root->setTitel( sTitel );
    20. root = root->getNext();
    21. }
    22. else
    23. {
    24. iter = root;
    25. while (iter->getNext() != NULL)
    26. {
    27. iter = iter->getNext();
    28. }
    29. C_CDRom* neueCD= new C_CDRom;
    30. iter = iter->getNext();
    31. iter = neueCD;
    32. neueCD->SetInterpret( sInterpret );
    33. neueCD->setTitel( sTitel );
    34. neueCD = neueCD->getNext();
    35. neueCD = NULL;
    36. }
    37. AnzahlCD++;
    38. }
    39. void C_Regal::AusgabeRegalInhalt()
    40. {
    41. cout << "Nummer\tInterpret\tTitel" << endl;
    42. if ( root != NULL)
    43. {
    44. iter = root;
    45. while(iter->getNext() != NULL)
    46. {
    47. int x=0;
    48. cout << x << "\t" << iter->GetInterpret() << "\t" << iter->GetTitel() << endl;
    49. iter = iter->getNext();
    50. x++;
    51. }
    52. }
    53. cout << "===========================" << endl;
    54. }
    55. int main()
    56. {
    57. Regal.CDsReinstellenNachLetzerPos(shaggy, laledu);
    58. Regal.CDsReinstellenNachLetzerPos(Petermaffai, schrei);
    59. Regal.CDsReinstellenNachLetzerPos(sido, singsing);
    60. Regal.AusgabeRegalInhalt();
    61. system ("pause");
    62. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Flippo ()

  • ich hab jetzt den code garnicht angeschaut es geht nur um den Befehl bei dem es abbricht: while(iter->getNext != NULL)
    Ich weiß nicht genau, wie die verkettete Liste in C++ implementiert ist, aber im so wie ich es kenne, darfst du beim letzten element nichtmehr getNext aufrufen. Da du sonst in ne Nullpointerexception (oder ähnliches läufst)
    Normalerweise bietet ne verkettete Liste ne Methode hasNext (oder ähnlich) an, mit der du gefahrlos prüfen kannst ob es noch elemente hat. Wenn ja, kannst du getNext aufrufen.
    Du müsstest also einfach nur while(iter->hasNext) prüfen.
  • okay sorry...

    also ich hab mein programm jetzt soweit hinbekommen... ich moechte die Liste die dann eingegeben wird in eine Textdatei schreiben und speichern... meine funktion dazu sieht so aus:

    Quellcode

    1. void C_Regal::CDFileExport(string filename)
    2. {
    3. ofstream myFile;
    4. myFile.open(filename.c_str(),ios::out|ios::trunc);
    5. if (!myFile)
    6. {
    7. cout << "Datei konnte nicht geoeffnet werden" << endl;
    8. cout << "===========================" << endl;
    9. }
    10. C_CDRom *iter = root;
    11. for (int i=0; i<GebeAnzahlCD() ; i++)
    12. {
    13. myFile << iter->GetInterpret() << " " <<iter->GetTitel() << endl;
    14. iter->getNext();
    15. }
    16. myFile.close();
    17. }
    Alles anzeigen


    Nun wenn ich sie Infotmationen, sagen wir insgesamt 5 Interpreten und 5 Titel ,speichern will, speichert er immer nur die erste information also interpred 1 und Titel 1... Diese Information jedoch 5 mal, sodass ich in meiner Datei dann folgendes stehen habe:

    mozart symphony
    mozart symphony
    mozart symphony
    mozart symphony
    mozart symphony

    wie verhindere ich das und mache das richtig?