Compiler macht was er will ...



  • Hallo... Ich bin beim debuggen auf einen seltsamen Fehler gestossen...

    void Bar::Foo(size_t min)
    {
    	std::string NewData("");
    
    	std::vector<std::string> Words;
    
    	std::string Word("");
    	bool IsWord = true;
    	size_t latestposition = 0;
    
    	for (size_t i=0; i<Data.size(); i++)
    	{
    		// Code
    	}
    }
    

    Zeile 3 bis 9 wird vollstaendig ignoriert... Es wird nichts davon ausgefuehrt, sondern sofort mit der for-Schleife begonnen. Obwohl dann latestposition dann nicht bekannt sein duerfte, gibt es keinen Fehler, sondern stattdessen hat latestposition irgendeinen sehr grossen Wert. Auch der Parameter der Memberfunktion min hat einen seltsamen Wert den er nicht haben kann, da er a) in Foo() nicht veraendert wird und b) mit dem Wert 5 uebergeben wird. Ich versteh das nich, das sind ja nur "harmlose" Anweisungen... Ist das ein Fehler meines Compilers?

    Gruss
    Cartman



  • welcher compiler? welche header? Ich rate mal drauflos: du hast windows.h included und das Makro macht Mist in deinem Code. min ixt kein guter Name für eine Variable...
    versuch mal den code nach dem präprozessor abzufangen.



  • pumuckl schrieb:

    welcher compiler? welche header? Ich rate mal drauflos: du hast windows.h included und das Makro macht Mist in deinem Code. min ixt kein guter Name für eine Variable...

    Okay, aber selbst wenn ich die Variable als min_size bezeichne, erhalte ich denselben Fehler.
    Und windows.h ist nicht eingebunden.
    Es sind lediglich folgende Header eingebunden:

    #include <string>
    #include <sstream>
    #include <vector>
    #include <cstddef>
    

    Ich hab den MSVC2008 Express



  • pumuckl schrieb:

    Ich rate mal drauflos: du hast windows.h included und das Makro macht Mist in deinem Code.

    Makros machen das gewöhnlich nicht, wenn sie nicht mit den entsprechenden Klammern aufgerufen werden.

    @Eric Cartman: Den generierten Assembler-Code ansehen könnte helfen.
    Hast du evtl. Optimierung aktiviert?



  • audacia schrieb:

    pumuckl schrieb:

    Ich rate mal drauflos: du hast windows.h included und das Makro macht Mist in deinem Code.

    Makros machen das gewöhnlich nicht, wenn sie nicht mit den entsprechenden Klammern aufgerufen werden.

    @Eric Cartman: Den generierten Assembler-Code ansehen könnte helfen.
    Hast du evtl. Optimierung aktiviert?

    Assembler kann ich leider nicht;
    Optimierung? 😕

    Gruss
    Cartman



  • Befindest du dich überhaupt im Debug-Modus?

    In der Release-Konfiguration werden einzelne Anweisungen häufig durch Optimierungen übersprungen.



  • Nexus schrieb:

    Befindest du dich überhaupt im Debug-Modus?

    In der Release-Konfiguration werden einzelne Anweisungen häufig durch Optimierungen übersprungen.

    Autsch! Das wars... Vielen vielen Dank @ all 👍
    Hatte (um die endgueltige Geschwindigkeit meines Programms zu testen) die Release-Version kompiliert (gestern) und beim debuggen (heute) ist mir das gar nicht aufgefallen.

    Gruss
    Cartman



  • Kein Problem. 🙂

    Das Problem hatte ich drum auch schon oft. Ich habe mich auch schon gefragt, warum ich gewisse Variablen nicht lesen kann oder nur Schrott drin steht.

    Deshalb besser im Debug-Modus debuggen. 😉



  • Das Problem hatten wir wohl alle schon 🙂

    Man grübelt, warum er eine bestimmte Sprungmarke nicht erreicht hat... Kann ja nur am Code liegen 😃 - oder an der Inkompetenz des Entwicklers 😉



  • Du hast die Entwicklungsumgebung vergessen. An der kann das nämlich auch liegen. 🙂



  • it0101@loggedoff schrieb:

    Das Problem hatten wir wohl alle schon 🙂

    Man grübelt, warum er eine bestimmte Sprungmarke nicht erreicht hat... Kann ja nur am Code liegen 😃 - oder an der Inkompetenz des Entwicklers 😉

    Ein echter Programmierer kann deshalb genug Assembler um kurz einen Blick auf den echten Code werfen zu können 🙂


Anmelden zum Antworten