Compiler



  • Wenn bearbeiteteWoerter==0 ist, machst du noch einen Schleifendurchlauf. In dem dekrementierst du bearbeiteteWoerter dann eventuell (es ist also -1) und greifst auf Woerter[bearbeiteteWoerter] , also Woerter[-1] zu. Das kann ja nicht funktionieren. Du solltest deinen Ablauf überdenken.

    Ach ja, und sowas

    bearbeiteteWoerter<0==false
    

    ist natürlich sehr ungewöhnlich formuliert. Wieso nicht einfach so?

    bearbeiteteWoerter>=0
    


  • nun ich hab mir ein neuer code überlegt aber der will auch wieder nicht tun
    das gleiche problem wie beim anderem code 😞

    string vergleicheWort(vector<string> &Woerter
    					,vector<tSprache> &Sprache)
    {
    
    string Binärcode;
    
    unsigned int c=0;
    unsigned int Ende=0;
    int Error=0;
    int HEX=0;
    unsigned int gr=Woerter.size()-1;
    
    while(Ende==0 && Error==0 )
    	{
    
    		if("HEX"==Woerter[gr].substr(0,3)){
    
    		Binärcode=Binärcode+HEXA(Woerter[gr].substr(3,Woerter[gr].size()-1));
    
    		if(gr!=0){
    			gr--;}
    		else{
    			Ende=1;}
    
    		}
    
    		while(Sprache[c].Name!=Woerter[gr] && Ende==0   && c<Sprache.size() && Error==0){
    
    	     c++;
    		}
    
    		if(c>=Sprache.size()){
    		Error=1;
    
    		SetColor(13);
    
    		cout << "Fehler Befehl konnte nicht gefunden werden:"<<endl;
    		SetColor(15);
    		cout<<"Befehl:";
    		SetColor(12);
    		cout<<Woerter[gr]<<endl;
    		SetColor(15);
    		cout<<"Zeile:";
    		SetColor(12);
    		cout<<Zeilenanz<<endl;
    		SetColor(15);
    
    		}
    
    		if(Error==0){
    			if(Sprache[c].Name==Woerter[gr] && Ende==0   && c<Sprache.size() ){
    
    			if(gr!=0){
    			gr--;}
    			else{
    			Ende=1;}
    
    			Binärcode=Binärcode+Sprache[c].Binärcode;
    			c=0;
    
    			}
    		}
    	}
    return Binärcode;  
    }
    


  • Hast du mal versucht, den Fehler mit dem Debugger zu finden?



  • nartürlich, wie gesagt es ist das gleiche wie mit dem anderen code.
    bzw:

    Tufelix schrieb:

    also der fehler tritt auf wenn bearbeitetewoerter der wert -1 hat und der debugger bei dem schleifenanfang ist wenn man dann einen schritt macht kommt die fehlermeldung

    nur das es die variable Ende ist und das sie den wert 1 hat.
    hier mal die fehlermeldung

    Unbehandelte Ausnahme bei 0x7c812afb in Editor.exe: Microsoft C++-Ausnahme: std::out_of_range an Speicherposition 0x0012f144..
    

    ich hab jetzt ein wenig rumprobiert und hab dann den code so umgebaut das wenn die variable gr den wert 1 hat, die schleife beendet wird also das das erste wort im vector weggelassen wird.Nun der Code hat komischerweise funktionier.kann es also sein das es vielleicht an dem vector woerter liegt?



  • Es liegt sicher nicht an der Variablen Ende (in welcher Zeile kracht es denn? Schau dir mal die Zeile darüber an). Einer der std::vector wird das Problem sein. Mit "Fehler finden per Debugger" meine ich eigentlich nicht unbedingt, es krachen lassen und dann schauen, sondern mal am Anfang (oder an kritischen Stellen) einen Haltepunkt setzen, Zeile für Zeile das Programm durchlaufen lassen und überprüfen, ob der Ablauf und alle Werte wirklich so sind, wie sie sein sollen.



  • oho, hab jetzt mal auch bei return Binärcode einen haltepunkt gesetzt und hab gemerkt das doch die schleife stoppt und das return einen richtigen binärcode zurückliefert. Hab dann die funktion BinärtoHexa überprüft und da ist dann der fehler aufgetreten.Danach ist mir erst aufgefallen das der eingelesen satz des testcode wenn man in mit der sprache übersetzt 13 binärzalen ergeben und daraus lässt sich keine hexazahl machen. 😃 Also danke _Matze das du mir so weitergeholfen hast 😃
    Nun ich glaube mein problem ist gelöst. Jetzt muss ich nurnoch eine funktion einbauen die leere zeilen überspringt und dann ist der übersetzer fertig.



  • Tufelix schrieb:

    Also danke _Matze das du mir so weitergeholfen hast 😃

    Genaugenommen hast du dir ja selbst geholfen. 🙂 Wenn man sich erst mal an den Debugger gewöhnt und dessen Möglichkeiten nutzt (du kennst vermutlich noch gar nicht solch nützliche Dinge wie Datenhaltepunkte), sind die meisten Fehler recht schnell gefunden. Anfänger versuchen es leider allzu oft mit der Methode "auf den Code starren und darauf warten, dass sich der Fehler von selbst zeigt". 😉



  • Anfänger versuchen es leider allzu oft mit der Methode "auf den Code starren und darauf warten, dass sich der Fehler von selbst zeigt".

    Nun ich hab das früher anders gemacht ,da hab ich an bestimmten stellen der schleife cout befehle mit einem text oder ne variable eingefügt und daduch konnte ich in dem consolenfenster sehen wo gerade der debugger in der schleife stand und wie die werte in der variablen sind. 😃



  • Tufelix schrieb:

    Anfänger versuchen es leider allzu oft mit der Methode "auf den Code starren und darauf warten, dass sich der Fehler von selbst zeigt".

    Nun ich hab das früher anders gemacht ,da hab ich an bestimmten stellen der schleife cout befehle mit einem text oder ne variable eingefügt und daduch konnte ich in dem consolenfenster sehen wo gerade der debugger in der schleife stand und wie die werte in der variablen sind. 😃

    Ja, das geht auch. Aber viele Features des Debuggers sind so nicht nutzbar. Ich mache sowas nur, wenn ich keine Entwicklungsumgebung auf dem Zielrechner habe (und kein Remote-Debugging möglich ist).


Anmelden zum Antworten