the value of esp was not properly saved across a function call



  • Hallo,

    ich habe eine Headerdatei. In dieser ist ein namespace mit verschiedensten Funktionen gespeichert. Einige Funktionen nutzen Funktionen, die bereits im namespace vorhanden sind. Bei einer Funktion hab ich da ein Problem. Wenn ich nämlich eine Funktion, die einen Boolean zurück gibt, aufrufe, und diese Funktion "true" zurück gibt, so kommt immer ein Fehler: "the value of esp was not properly saved across a function call".

    bool function1(string a) {
    		return true;
    	}
    
    	bool function2(string b) {
    		if (function1 == false) { //"the value of esp was not properly saved across a function call" nachdem das hier ausgeführt wurde
    
    		}
    	}
    


  • if (function1("HALLO WELT") == false)
    


  • Du weißt dass das ohne Klammern kein Funktionsaufruf ist ?



  • Du vergleichst die Adresse der Funktion function1 mit false. Das ist immer false. Daher und weil ein return fehlt, liefert die Funktion function2 nie ein Ergebnis.



  • Ich muss mich korrigieren.

    bool function1(string a) {
    		return true;
    	}
    
    	bool function2(string b) {
    		if (function1("Hallo Welt") == false) { //"the value of esp was not properly saved across a function call" nachdem das hier ausgeführt wurde
    
    		}
    		return true;
    	}
    

    Ich hab vergessen, dass ich beim Aufruf von function1 noch was angeben muss ("Hallo Welt").

    Der Fehler "the value of esp was not properly saved across a function call" bleibt aber trotzdem.



  • Du zeigst nicht den Code, der den Fehler erzeugt. Viel Spass beim Suchen.



  • Da musst du schon mehr Infos bringen, um was es gehen soll, minimal kompilierbares Beispiel, ...

    Darf man fragen, wieso man überhaupt so einen Code schreiben wollen würde?^^

    Dieser Code kompiliert bei mir sowohl auf VC++12, als auch verschiedene MinGW Versionen (glaub 4.8.x und 4.7.x) einwandfrei (abgesehen von den offensichtlichen Warnungen)

    #include <string>
    
    using namespace std;
    
    bool function1(string a)
    {
        return true;
    }
    
    bool function2(string b)
    {
        if (function1("Hallo Welt") == false) { //"the value of esp was not properly saved across a function call" nachdem das hier ausgeführt wurde
    
            }
        return true;
    }
    
    int main()
    {
        function2("hello world");
    }
    

    Ein schnelles googeln zeigt aber, dass das kein unbekanntes Problem ist.
    Pobierst du in VC++ irgendwas mit Libraries? Jedenfalls gibt es vielleicht schon eine Lösung für dein Problem.



  • Werden irgendwelche Funktionen gehackt? Hast du irgendwo inline-Assembler drin?


Anmelden zum Antworten