wer kanns erklären??
-
Bin Neuling, vielleicht kann mit jemand folgendes erklären:
Das ist mein Struct:struct zustand_note
{
std::vector<int> werte; // die Zahlen in einen Vektor verpackt
zustand_note *next; // Verknüpfung zum Nachfolger
};
zustand_note *anker = 0; // Anfang der Listeein Vektor zum Speichern von intWerten und ein Zeiger auf das nächste Element von Struct.
2 Funktionen:
void zustand_note_ausgeben(zustand_note zx)
{
std::cout << zx.werte[1] << " " << zx.werte[2] << " " << zx.werte[3] << std::endl;
std::cout << zx.werte[4] << " " << zx.werte[5] << " " << zx.werte[6] << std::endl;
std::cout << zx.werte[7] << " " << zx.werte[8] << " " << zx.werte[9] << std::endl << std::endl;
}Zum ausgeben der Werte des Stuct, und
void zustand_note_init(zustand_note zy, int int1, int int2, int int3, int int4, int int5, int int6, int int7, int int8, int int9)
{
zy.werte[1] = int1;
zy.werte[2] = int2;
zy.werte[3] = int3;
zy.werte[4] = int4;
zy.werte[5] = int5;
zy.werte[6] = int6;
zy.werte[7] = int7;
zy.werte[8] = int8;
zy.werte[9] = int9;
}zum initialisieren der werte. Jetzt mein Problem:
int main(int argc, char *argv[])
{
zustand_note startzustand;
zustand_note endzustand;std::cout << "Programm 8-Puzzle-Breitensuche wird gestartet!\n";
zustand_note_init(startzustand, 2, 8, 3, 1, 6, 4, 7, 0, 5);
zustand_note_ausgeben(startzustand); //erste Ausgabezustand_note *node = new zustand_note;
node->werte = startzustand.werte;
node->next = anker;
zustand_note_ausgeben(node->werte);// zweite Ausgabe
zustand_note_init(endzustand, 1, 2, 3, 8, 0, 4, 7, 6, 5);
zustand_note_ausgeben(endzustand);// dritte Ausgabe
zustand_note_ausgeben(startzustand);// vierteAusgabe
zustand_note_ausgeben(node->werte);// fünfte Ausgabesystem("PAUSE");
return EXIT_SUCCESS;
};Ich initialisiere den Startzustand und kopiere seine Werte in den neuen Zeiger auf ein Structelement. danach initialisiere ich den endzustand.
Jetzt kommt die Ausgabe:
Programm 8-Puzzle-Breitensuche wird gestartet!
2 8 3 //Ausgabe 1 alls richtig startzustand initialsiert und
1 6 4 // werte richtig
7 0 52 8 3 //Ausgabe 2 alls richtig *node initialsiert und werte richtig kopiert
1 6 4
7 0 51 2 3 //Ausgabe 3 alls richtig endzustand initialsiert und
8 0 4 // werte richtig
7 6 51 2 3 // erneute Ausgabe von startzustand gibt mir die werte des endzustand???
8 0 4 // wie kann das sein, hab doch nichts geändert
7 6 51 2 3 // erneute Ausgabe von *node gibt mir auch die werte des endzustand???
8 0 4
7 6 5Drücken Sie eine beliebige Taste . . .
Kann mir das bitte iner erklären oder lösen?
-
1. Benutze cpp - Tags.
2. Ist dein Code so nicht annähernd lauffähig.
- vector wird nicht initialisiert. -> Überlauf
- du greifst bei dem vector auf [9] zu, was bei 8 Elemente, wie du sie hast auch einen Fehler gibt.
- Da du das Objekt als ganzes übergibst und keinen copy-ctor hast, crasht es auch da.
3. Du übergibst beim füllen das Objekt per Kopie, was auch falsch ist.
4. Du hast da kein delete für nodeIch frage mich überhaupt, wie du da eine Ausgabe bekommen hast..

Nach meiner Anpassung bekomme ich die richtigen Ausgaben..Also behebe mal deine Fehler, dann funktionierts auch mit der Ausgabe.

Achja:
Schrecklicher Code, aber das sollte mit der Zeit besser werden. (Darauf gehe ich jetzt nicht näher ein, ausser du bestehst darauf. ;))
-
drakon schrieb:
1. Benutze cpp - Tags.
2. Ist dein Code so nicht annähernd lauffähig.
- vector wird nicht initialisiert. -> Überlauf
- du greifst bei dem vector auf [9] zu, was bei 8 Elemente, wie du sie hast auch einen Fehler gibt.
- Da du das Objekt als ganzes übergibst und keinen copy-ctor hast, crasht es auch da.
3. Du übergibst beim füllen das Objekt per Kopie, was auch falsch ist.
4. Du hast da kein delete für node
...5. Der Threadtitel ist nichtssagend.
-
Simon2 schrieb:
drakon schrieb:
1. Benutze cpp - Tags.
2. Ist dein Code so nicht annähernd lauffähig.
- vector wird nicht initialisiert. -> Überlauf
- du greifst bei dem vector auf [9] zu, was bei 8 Elemente, wie du sie hast auch einen Fehler gibt.
- Da du das Objekt als ganzes übergibst und keinen copy-ctor hast, crasht es auch da.
3. Du übergibst beim füllen das Objekt per Kopie, was auch falsch ist.
4. Du hast da kein delete für node
...5. Der Threadtitel ist nichtssagend.
Och.. Da gibts noch mehr.
Allerdings muss ich da mal sagen, dass er da nicht der einzige ist,der einen nichtssagenden Titel hat...