wenn ich von einer Methode einer Instanz eine neue Instanz der selben Klasse zurückgebe und diese dann später (im DEBUG-Mode) mit delete oder free löschen will, stürzt das Programm ab. Vorher kann ich ohne Probleme auf die Instanz zugreifen. Der Dekonstruktor wird beim delete auch einwandfrei durchlaufen. Der Absturz erfolgt genau nach Beendigung des Dekonstruktors.
Die Implementierung der Klasse erfolgte in original C++ (kein C#) und liegt in einer DLL. Die erste Instanz wurde von der EXE auf dem Heap erzeugt.
Hier ein stark vereinfachter Code: class X { ... X* getIrgendwas() { return(new X()); } }
void main() { X* x = new X(); X* y = x->getIrgendwas();
...
delete x; //funktioniert delete y; // CRASH!!! }
Kennt jemand eine Lösung des Problems? Mein Dank im vorraus.
Es heißt Destruktor, nicht Dekonstruktor. Es heißt int main und nicht void main. Wolltest du das wissen? Ansonsten ist der Code in Ordnung (es fehlt ein Semikolon für class x). Muss dann an irgendwas dll-spezifischem liegen. -- Wer früher stirbt ist länger tot.
sowas kann auch an irgendwelchen Speicherverletzungen im vorherigen Code liegen. Das ganze Programm läuft weiter und stürtzt erst ab wenn man das ganze freigibt. Also ich hatte sowas auch schon (Allerdings bei MFC) keine Ahung warum das so ist.
freigeben von datenbereichen aus einer dll gibt meist einen crash, wenn du das freigeben in der dll machst, funktioniert es normalerweise. -- class God : public ChuckNorris { };
hat ich häufig jedenfalls das problem, das dann free bzw delete an der stelle mit ner av abgestürzt ist, sobald ich dann das freeen in der dll ausgeführt hab war der fehler weg. Evtl ists auch der VC der da bischen rumspackt -- class God : public ChuckNorris { };