probleme mit delete und mehreren klassen
-
Was genau ist std::vector? Ich habe bis jetzt noch nichts davon gehört...
-
Ein std::vector ist eine Container-Klasse aus der STL, d.h. das Ding ist
plattform unabhängig. Das Ding stellt in etwa einen dynamischen Array dar, d.h.
du greifst mittels Index auf die einzelnen Elemente zu ohne vor Gebrauch
die maximale Anzahl der Elemente zu wissen.mfg JJ
-
oh..tja CEreignisArray werde ich aber leider ned damit ersetzen können, da ich die Klassen vorgegeben habe, und die Funktionen sowie das main schreiben muss....weiß wer vielleicht eine andere Lösung auf mein Problem?
-
Archon schrieb:
oh..tja CEreignisArray werde ich aber leider ned damit ersetzen können, da ich die Klassen vorgegeben habe, und die Funktionen sowie das main schreiben muss....weiß wer vielleicht eine andere Lösung auf mein Problem?
Dein CEreignisArray kann aber einen std::vector benutzen. Dieser sollte in jedem C++ Kurs oder Buch eingehend beschrieben werden, bevor man mit Arrays hantiert.
-
Interessant, ich habe schon seit einem Schuljahr Programmieren(C/C++),aber noch nie was von den std::vector gehört, Arrays pointer etc. haben wir aber schon gemacht.....
Wie funktioniert std::vector?
-
Da die STL bei jedem Compiler dabei ist, hilft am besten ein Blick in die
jeweilige Dokumentation.Alternativ:
http://www.sgi.com/tech/stl/mfg JJ
-
Archon schrieb:
Interessant, ich habe schon seit einem Schuljahr Programmieren(C/C++),aber noch nie was von den std::vector gehört, Arrays pointer etc. haben wir aber schon gemacht.....
Wie funktioniert std::vector?Da hat dein Lehrer IMHO einige grundlegende Fehler gemacht.
-
Wie kommt das eigentlich dass bei delete fehler auftreten können? Kommt ein Fehler z.b.: raus wenn ich versuche einen schon mit delete gelöschten Speicher nochmals mit delete zu löschen?.....(ich hasse englische Beschreibungen - aber anscheinend muss ich mich an die gewöhnen, wenn aber wer in dem oben genannten Code einen Fehler findet bitte sagen....!)
-
Doppeltes delete solltest du in jedem Fall dadurch vermeiden, indem du Pointer,
die du mittels delete gelöscht hast, auf 0 setzt. Denn delete auf 0 richtet
garantiert keinen Schaden an.mfg JJ
-
- Eine Ursache könnte sein, dass Du im Konstruktor von CEreignis den Pointer nicht mit 0 initialisierst. Wenn dann der Pointer vor dem Destruktor-Aufruf nicht irgendwo vernünftig gesetzt wird, dann hast Du das geschilderte Verhalten.
- Erstellst Du vielleicht in Deinem Programm irgendwo eine Kopie von CEreignis durch einen Kopier-Konstruktor? Wenn nicht, solltest Du diesen implementieren, andernfalls zeigen 2 Pointer auf dieselbe Speicheradresse und es kommt zu einem doppelten delete.
-
An dem Kopierkonstruktor könnte es liegen
EDIT:Danke, das hat geholfen!