D
Nö, nciht, dass ich wüsste. Ich versuch das Problem mal etwas umfangreicher zu erläutern:
Ich hab ein Klassenkonstrukt, wie hier beschrieben: Problem mit Vererbung, Polymorphie und Templates
Dann gibt es C-Wrapperfunktionen für Derived1 und Derived2. Das sieht dann so aus:
CreateProject(int nType); Damit wird den Wrapperfunktionen gesagt, welche Klasse er verwenden soll, Derived1 oder Derived2. Je nachdem wird dann eben eine Instanz erstellt:
m_pDerived1 = new Derived1;
bzw.
m_pDerived2 = new Derived2;
In den anderen Funktionen des Wrappers hab ich dann ne Unterscheidung:
if(Type==0)
m_pDerived1->Func();
else
m_pDerived2->Func();
wobei es nciht zwingend beide Male Func sein muss, es kann auch mal zb Func(true) sein, je nachdem, wie diese Methode in der abgeleiteten Klasse implementiert ist.
Unsere Basisklasse hat aber ja auch Methoden, weswegen es eben Wrapperfunktionen gibt, in denen eben schon beide aufrufe gleich aussehen.
So und in so einer Funktion ist das Problem:
int SetXWrapper(int nX)
{
if(Type==0)
return m_pDerived1->SetX(nX);
else if(Type==1)
return m_pDerived2->SetX(nX);
else
return -1;
} // <- Hier
So, der Absturz erfolgt mit obiger Fehlermeldung an der markierten Stelle, also nachdem das return aufgerufen wurde, aber nur bei m_pDerived2 und auch nur bei dieser Funktion, andere Funktionen funktionieren einwandfrei ...
Wieso ich mit diesem Fehler absolut nix anfangen kann, ist ganz einfach:
SetX ist in der Basisklasse implementiert, wird also beide Male die selbe Funktion aufgerufen.
SetXWrapper wird auch beide Male gleich aufgerufen.
Der Fehler kommt nur sporadisch. Momentan kommt er nur, wenn ich mit F5 debugge, wenn ich die Debugversion mit Strg+F5 starte kommt er nciht, wenn ich die Release-Version mit Strg+F5 starte kommt er wieder ...
War aber nciht immer so, vorhin gings ne Zeit lang auch beim debuggen, dann gings dort plötzlich nciht mehr usw.
Kann das an einem Schreiben über Arraygrenzen oder wilden Zeigern liegen?
Ich verschieb mich selbst mal nach C++, da ich denke, dass es dort besser aufgehoben ist.
[ Dieser Beitrag wurde am 23.06.2003 um 22:32 Uhr von dEUs editiert. ]