Exception Handling: Fehler werden nur manchmal gecatched :-(((
-
KeineAhnung78 schrieb:
Ich hangele mich langsam mit F11 durch den Code und nachdem die Destruktoren der Basisklassen durch sind, kommt ein Visusl Studio Tab mit dem Text:
Aufruflistenort:
moca.exe!CWickelkopf::'scalar deleting destructor'() + 0x2b BytesUnd was passiert da?
-
Zum Thema 0xCDCDCDCD:
http://www.microsoft.com/msj/1198/c/c1198.aspx
http://www.nobugs.org/developer/win32/debug_crt_heap.htmlD.h. 0xCDCDCDCD ist Speicher der alloziert aber nicht initialisiert wurde.
D.h. wenn eine Member-Variable 0xCDCDCDCD ist, kann man fast davon ausgehen, dass das Objekt nicht (vollständig) konstruiert wurde.Wie es in deinem Programm passieren kann, dass ein Objekt zerstört wird, welches nicht vollständig konstruiert wurde, musst du selbst rausfinden.
EDIT: upps, das Thema 0xCDCDCDCD is ja schon durch. Sorry, mehr hab' ich auf die Schnelle nicht anzubieten.
-
MFK schrieb:
KeineAhnung78 schrieb:
Ich hangele mich langsam mit F11 durch den Code und nachdem die Destruktoren der Basisklassen durch sind, kommt ein Visusl Studio Tab mit dem Text:
Aufruflistenort:
moca.exe!CWickelkopf::'scalar deleting destructor'() + 0x2b BytesUnd was passiert da?
Ich komme da dann nicht mehr weiter. Selbst mit dem kleinsten Schritt F11 nicht. Komische Sache, wieso sehe ich keine Quellcodezeile mehr? Oje...ich versteh den Debugger nicht.
-
KeineAhnung78 schrieb:
Komische Sache, wieso sehe ich keine Quellcodezeile mehr?
Weil dein Programm nicht nur aus deinem Code, sondern auch aus jeder Menge Library-Code besteht. Und für den hat der Debugger oft nicht den Quellcode verfügbar.
Lass das Programm doch einfach mal weiterlaufen. Wenn etwas schlimmes passiert, wird sich der Debugger schon melden.
-
Kannst auch mit (IIRC) Debug > Windows > Disassembly (Alt+8) den Assemblercode angucken, wenn du daraus schlau wirst.
-
Ich muss noch ein wenig basteln, aber es scheint so zu sein, dass alle Fehler auf die Destruktoren zurückzuführen sind, in denen eine delete auf Zeiger ausgeführt wird, die zwar ungleich NULL sind, aber zu denen kein Objekt existiert.
Ich danke euch für die zahlreichen Antworten...falls es das doch nicht ist, werde ich hier wieder rumheulen

-
Hast du ein 64 Bit Betriebssystem?
-
Hallo,
KeineAhnung78 schrieb:
Ich muss noch ein wenig basteln, aber es scheint so zu sein, dass alle Fehler auf die Destruktoren zurückzuführen sind, in denen eine delete auf Zeiger ausgeführt wird, die zwar ungleich NULL sind, aber zu denen kein Objekt existiert.
Du hast also:
class CStatorwicklung { public: CStatorwicklung (); ~CStatorwicklung (); .... private: CWickelkopf* mWickelkopf; };In diesem Fall würde ich auf jeden Fall den Member 'mWickelkopf' im Konstruktor von 'CStatorwicklung' initialisieren.
CStatorwicklung::CStatorwicklung() : mWickelkopf (NULL) { }Ich initialisiere prinzipiell alle Members innerhalb des Initialisierungsteils des Konstruktors. Das hat einige Vorteile:
- Egal ob Debug oder Release hast Du so immer das gleiche Verhalten
- Du siehst viel besser dass das Objekt gar nicht erzeugt wurde
- Das Programm crasht dann dort wo der erste Zugriff erfolgt und nicht erst beim Aufruf des Destruktors.Herzliche Grüsse
Walter