[Debug Error] Abnormal program termination
-
Hi,
könnt ihr mir sagen, was an dem unten stehenden Code ein Problem für
den Rechner ist? Ich weiss leider nur soweit, dass der dynamic_cast den
Ärger bereitet, verstehe aber nicht weshalb.Danke im Voraus,
Khadgar#include <iostream> #include <string> using namespace std; class Tier { public: Tier() {} Tier(int pAlter) { thisAlter = pAlter; } ~Tier() { cout << "... Tier Destruktor\n"; } void SetzeAlter(int pAlter) { thisAlter = pAlter; } int HoleAlter() const { return thisAlter; } virtual void Sprich() const { cout << "Tier spricht\n"; } protected: int thisAlter; }; class Hund : public Tier { public: Hund() {} Hund(int pAlter) { thisAlter = pAlter; } ~Hund() { cout << "... Hund Destruktor\n"; } void Sprich() const { cout << "Wuff\n"; } void Knurr() const { cout << "Grrr\n"; } }; int main() { Tier * pTier; pTier = new Hund(); Hund * pHund; pHund = dynamic_cast< Hund * > (pTier); pHund->Knurr(); delete pTier; delete pHund; return 0; }
-
virtual destructor
-
Hm, also bie mir (GCC 3.2 auf cygwin) läufts so durch mit der Ausgabe:
Grrr ... Tier Destruktor ... Hund Destruktor ... Tier Destruktor
Wobei ich nicht weiß, ob es gut ist, dass du dasselbe objekt zweimal löschst
-
rtti aktivieren
-
delete pTier;
delete pHund;du löscht das objekt ja zweimal.
-
Original erstellt von <grr>:
rtti aktivierenguter hinweis.. fürs studio:
Rufen Sie für Ihr Projekt den Befehl Projekt/Einstellungen auf.
Gehen Sie zu der Registerkarte C++.
Wählen Sie die Kategorie: Programmiersprache C++ aus.
Setzen Sie die Option Run-Time-Type-Informationen (RTTI) aktivieren.
Kompilieren Sie das gesamt Projekt neu.
-
Ok, danke erstmal für Eure schnelle Hilfe!!
Zu der Kritik am doppelten Delete:
Das Programm erreicht die Delete-Anweisungen nicht:
Die Verarbeitung stoppt genau beim Umwandeln durch den dynamic_cast.Bezüglich der RTTI:
Was genau ist das?
Wofür brauche ich das?Bezüglich CGG 3.2:
Ich arbeite mit VC++ 6... ist das schlimm?
Für Java nutze ich Borland: Sollte ich für C auch?Danke im Voraus,
Khadgar
-
Original erstellt von elise:
**guter hinweis.. fürs studio:Rufen Sie für Ihr Projekt den Befehl Projekt/Einstellungen auf.
Gehen Sie zu der Registerkarte C++.
Wählen Sie die Kategorie: Programmiersprache C++ aus.
Setzen Sie die Option Run-Time-Type-Informationen (RTTI) aktivieren.
Kompilieren Sie das gesamt Projekt neu.**
-
Ok, mit zugeschaltetem RTTI läuft das ganze zumindest.
Danke Euch allen!!
-
RTTI = Run Time Type Information
also alles, was mittypeid typeinfo und dynamic_cast
zu tun hat
-
Dank dir!