Variable corrupted



  • Also das Problem besteht darin, dass ich immer eine Fehlermeldung bekomme, dass die Variable Region corruted wird.
    Ich weis nicht, woran es liegt. Bei der verketteten Liste funktioniert alles und er kommt auch bis zum getch(). Nur danach kommt die "}" der Funktion und somit auch die Fehlermeldung.
    Habe auch schon einige andere Varianten versucht, ohne Erfolg.
    Mirwürde noch einfallen, die Variable global zu machen, nur ich denke, das Problem muss auch so lösbar sein.

    Quellcode

    std::fstream RegBin;
    
    	const int Anz_Reg = 6;
    	char Region[6];
    
    	for(;temp_id->nachf != NULL; temp_id = temp_id->nachf){
    		RegBin.open("Regionen_Binaer.txt", std::ios::out|std::ios::app|std::ios::in);
    		while (!RegBin.eof()){
    			RegBin>>Region;
    			if(strcmp(Region,temp_id->id) == 0){
    				RegBin>>temp_id->Bin_ID;
    			}
    			break;
    		}
    		RegBin.close();
    	}
    	getch();
    

    Vielen Dank im Vorraus für Hilfe.



  • eigentlich soll dort unten im vor-raus stehen, weis nicht, wieso das nicht funktioniert hat



  • Gast101 schrieb:

    eigentlich soll dort unten im vor-raus stehen, weis nicht, wieso das nicht funktioniert hat

    Weil man das Wort doch tatsächlich anders schreibt. Und da hat sich der Admin einen Spaß daraus gemacht, es in die Zensur-Liste des Forums einzutragen. Hihi. :xmas1:


  • Mod

    Da sind jede Menge Fehlerquellen drin. Welche davon genau das Problem ist, ist schwer zu sagen.

    while (!RegBin.eof())
    

    Übersetzt: Solange die letzte Aktion nicht eof ergab, mache noch eine Aktion und übernimm deren Ergebnis ungeprüft.

    RegBin>>Region;
    

    Und wenn da nun etwas mit mehr als 5 Zeichen steht?

    Das sind die zwei krassen Fehler. Ansonsten hast du da ein paar merkwürdige Entscheidungen getroffen. Warum die Datei immer neu öffnen? Warum die Datei mit so vielen Modi öffnen, wenn du nur liest? Warum die Datei von Hand schließen, wenn sie doch in der nächsten Zeile zerstört wird? Was, wenn sie gar nicht offen war? Was, wenn beim Lesen etwas anderes als eof nicht klappt? Willst du wirklich C-Strings? Willst du wirklich C-String Funktionen? Was soll das break dort? Wozu dann überhaupt die Schleife?



  • Ich weis, was du meinst, aber ich habe mit dem Debugger schon überprüft, er weist jeder ID den richtigen BinärCode zu, daran kann es also nicht liegen.

    Ich kenne das Tetxdokument, da ich es selber erstellt habe, und somit immer die gleiche Anzahl an Zeichen vorkommt^^.

    Die IDs können in der Liste immer in unterschiedlicher Reihenfolge stehen und wenn ich die atei nur am Anfang öffne (von rein logischen her) sollte er dann weitersuchen und nicht wieder an den Anfang zurückspringen.

    Die Schleife (ich denke du meinst die for) dient im allgemeinen dazu, die verkettet Liste durchzulaufen, da wie oben beschrieben, die Reihenfolge nicht immer gleich ist. Deshalb nehme ich an, es ist günstiger, dass Textdokument immer wieder neu aufzurufen und die verkettete Liste immer der Reihe nach durchzugehen, als umgekehrt. Vielleicht gibt es eine Funktion, die an den Anfang des Dokuments springt, aber ich habe keine Funktion wie .start gefunden

    ok, habe abgefangen, wenn sie nicht geöffnet werden konnte, aber Fehler ist immer noch der selbe.

    das break war nur zum test zwischendurch, habe ich nur vergessen gehabt, hier wieder raus zu löschen ^^.


  • Mod

    Tja, dann bleiben für uns mit den Informationen die du uns gegeben hast aber nur zwei Möglichkeiten:
    1. Du hast Recht.
    2. Dein Computer hat Recht.
    Und rate mal, welcher von den beiden Möglichkeiten man wohl eher glauben wird.

    Dir wurden zahlreiche Fehler in deinem Programm genannt. Dadurch, dass du sie verteidigst, werden sie auch nicht besser, du zeigst nur, dass du zum Teil gar nicht verstanden hast, was der Fehler ist.


Anmelden zum Antworten