Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Brauche dringend Hilfe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.04.2008, 00:12 Uhr
~danhof
Gast


Bin Neuling, vielleicht kann mit jemand folgendes erklären:
Das ist mein Struct:

C++:
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 Liste



ein Vektor zum Speichern von intWerten und ein Zeiger auf das nächste Element von Struct.
2 Funktionen:

C++:
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

C++:
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:

C++:
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 Ausgabe

  zustand_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 Ausgabe

  system("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:

Code:
Programm 8-Puzzle-Breitensuche wird gestartet!
2 8 3 //Ausgabe 1 alls richtig startzustand initialsiert und
1 6 4 // werte richtig
7 0 5

2 8 3 //Ausgabe 2 alls richtig *node initialsiert und werte richtig kopiert
1 6 4
7 0 5

1 2 3 //Ausgabe 3 alls richtig endzustand initialsiert und
8 0 4 // werte richtig
7 6 5

1 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 5

1 2 3 // erneute Ausgabe von *node gibt mir auch die werte des endzustand???
8 0 4
7 6 5


Drücken Sie eine beliebige Taste . . .

Kann mir das bitte iner erklären oder lösen?


Bearbeitung von 0xdeadbeef:

cpp-Tags eingefügt, nächstes mal selbst machen.


Dieser Post wurde am 29.04.2008 um 02:48 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.04.2008, 03:01 Uhr
0xdeadbeef
Gott
(Operator)


Also, zunächst mal kann ich den Code, wie du ihn da hast, hier nicht kompilieren, weil zustand_note_ausgeben keinen std::vector<int> akzeptiert, und dementsprechend

C++:
zustand_note_ausgeben(node->werte);


nicht kompiliert. Dies lässt mich glauben, dass einige wesentliche Änderungen im Code gemacht wurden, die den Fehler verursachen, im obrigen Post aber nicht vorkommen.

Wie dem auch sei, wenn ich das behebe, fliegen natürlich segfaults, weil zustand_note::werte uninitialisiert zum Schreiben benutzt wird. zustand_note_init schreibt in Speicher, der dir nicht gehört. Zusätzlich dürfte zustand_note_init die Instanzen von zustand_note, mit denen sie aufgerufen wird, nicht verändern, weil diese als Wert und nicht als Referenz übergeben werden.

Wie dem auch sei, meine Vermutung ist, dass du zustand_note::werte static gemacht hast, was dazu führt, dass nur einer vorhanden ist, der jedesmal neu überschrieben wird. Aber ohne deinen wirklichen Code zu sehen, kann ich das nicht sicher sagen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 29.04.2008 um 03:02 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: