Runtime Fehler ...



  • Hi Leute,
    Ich hab hier nen ganz komishcen Fehler:
    Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

    Bekomm ich, wenn ich aus einer funktion zurückkehren möchte. Ich wüsste nicht, wo ich in dieser Funktion ne Callback aufruf, deswegen verwirrt mich das ziemlich. Jemand ne Idee, woran es noch liegen könnte?



  • hm, wartet mal mit antworten, habs grad wieder zum laufen gebracht, bin aber immer noch verwirrt ...



  • benutzt du irgendwo __stdcall ?



  • 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. ]


Anmelden zum Antworten