delete macht Probleme
-
Hallo!
Ich habe eine Klasse geschrieben und eine Instanz mit new angelegt. Wenn ich die Instanz mit delete wieder löschen will erscheint das Dialogfeld "Problembericht senden".
Selbst wenn ich im Destruktor alles auskommentiere oder den Destruktor ganz entferne kommt genau bei delete dieser Fehler.
Womit kann das zusammenhängen, d.h. wo würdet ihr den Fehler suchen?
Code zu posten macht glaub ich keinen Sinn weil da zu viele Klassen daran beteiligt sind. Der Fehler tritt aber sicher genau in dieser Zeile auf. Der Pointer zeigt auch sicher auf eine gültige Instanz, weil ich noch in der Zeile vorher erfolgreich eine Methode aufrufe.
Danke!
mfg
-
Aja, was wesentliches hab ich noch vergessen: Der Destruktor wird nie "betreten". Sprich: Eine Testausgabe gleich in der ersten Destruktor-Zeile wird nicht mehr angezeigt weil vorher der Fehler kommt.
-
schwer zu sagen, wenn du keinen code postest.
wenns so komplex ist(das programm..), würd ich jetzt einfach mal raten, das irgendeins der beteiligten objekte bereits deleted wurde, und durch deinen aufruf wird versucht dieses objekt nochmal zu deleten...
dann müsstest du erst mal rausfinden, welches objekt das sein könnte...vielleicht...
-
Welches Objekt es ist weiß ich schon. Inzwischen hab ich nochwas rausgefunden:
Es kommt auch auf den Kontext an. Manchmal geht delete problemlos, manchmal verursacht es den genannten Fehler. Wenn ich vor dem delete z.B. eine Kontrollausgabe mache (std::cout << "...";) tritt das Problem auf, wenn ich die Kontrollausgabe wegnehme tritt der Fehler nicht auf (in anderen Situationen jedoch wieder schon). Schaut also so aus als ob es irgendwie ein Speicherproblem wäre. Gibt es irgendwelche typischen Gründe für derartiges Verhalten?
mfg
-
zeig den entsprechenden code (eingegrenzt).. solche laufzeitfehler können massen ursachen haben und sind schwer zu finden.
darüber hinaus debugge bitte dein programm schritt für schritt, um den fehler einzugrenzen.
-
wenn der destruktor vor dem beenden des programms von hand aufgerufen wird, kanns eh sein, dass er ne exception wirft und die müsstest halt fangen, wenn du mit delete irgendein objekt löschst
-
destruktor von "hand" aus aufrufen? lieber nicht..
aber du meinst wahrscheinlich über
delete zeiger;das sollte man jedoch immer tun. alles was ich mit new anfordere, wieder freigeben.
so long
-
Ich denke das Problem liegt nicht an delete.
Viel mehr danach irgendwann, wenn du noch mal auf
das dann tote Objekt zugreifst. Evtl. solltest
du mal das Programm debuggen...