programm stürzt beim einschreiben in datei ab



  • ich weiß das der Fehler in diesem Bereich liegt:

    int fr;     
                 char* pathchar;
                 string text,path;
                 fstream file;
                 stringstream convert,row;
                 string fileName;
                 cout<<"PFAD: ";
                 cin>>fileName;
    
                 cin.get();
    
                      file.open(fileName.c_str()); // oeffnen im Text-Modus
                if(file)
                {
                            saver = 0;
                            for(;fr<=26;)
                            {
                            saver = saver + 1;             
                            row << lettersaver[saver] + "\n";
                            row >> text;
                            }                   
    
                            file << text; // fertigen Text speichern
                            file.close();
                            cout<<"Schluessel erfolgreich geaendert\n"; 
                }
                else
                {
                            cout << "Datei Fehler!";
                }
    

    (mit einem Win error)
    keine Compiler Probleme
    ich weiß nicht ob das hilft aber in "weitere informationen" steht noch:
    C:\DOKUME1\Tim\LOKALE1\Temp\dcac_appcompat.txt
    ich hoffe ihr könnt helfen

    edit: hab noch was geändert:

    for(;fr<=26;)
                            {
                            saver = saver + 1;             
                            row << lettersaver[saver] + "\n";
                            row >> text;
                            row.clear();
                            }
    

    edit 2:
    habs nochmal geändert jetzt ist es:

    if(file)
                {
                            saver = 0;
                            for(;fr<=26;)
                            {
                            saver = saver + 1;             
                            row << lettersaver[saver] + "\n";
                            }                   
                            row >> text;
                            file << text; // fertigen Text speichern
                            file.close();
                            cout<<"Schluessel erfolgreich geaendert\n"; 
                }
    
    text += lettersaver[saver] + "\n";
                            }                   
                            file << text; // fertigen Text speichern
                            file.close();
    

    so geit es auch nit

    ich idiot hab das fr++ in der for schleife vergessen --> unendliche schleife 😞
    es funzt zwar nicht so wie es soll aber das ist ein anderes thema.



  • Ich kann es nur immer wieder sagen: solche Fehler findet man ganz schnell, indem man den Code schrittweise mit dem Debugger durchläuft (z.B. im VS mit F10 und F11). Eine Möglichkeit, die einem das Durchgehen im Kopf erspart und viel schneller zum Ergebnis führt, die Anfänger aber leider immer wieder außer Acht lassen.



  • fr wird nirgends initialisiert, und in der Schleife auch nicht verändert -> undefiniertes Verhalten wegen Punkt 1...



  • normalerweise übersehe ich einen solchen fehler nicht, aber bei einem so unordentlichem und verkomplizierten code dachte ich nicht daran und hab übersehen das zu prüfen, denn es liegt immer wieder an so etwas simplen und man denkt es sei ein total komplizierter fehler. ein ordentlicher compiler hätte natürlich ausgeschmissen, dass das so "komisch" ist.der kompiler der von visual c++ benutzt wird macht das zumindest (glaub ich).



  • Tim06TR schrieb:

    ein ordentlicher compiler hätte natürlich ausgeschmissen, dass das so "komisch" ist.der kompiler der von visual c++ benutzt wird macht das zumindest (glaub ich).

    Warum benutzt du dann nicht einen ordentlichen Compiler? Zusammen mit einem ordentlichen Debugger kann das einige Mühe ersparen und nebenbei zu besserem Code führen.

    Und ja, MSVC++ gibt bei uninitialisierten Variablen eine Warnung aus (bei entsprechender Warnstufe). Zur Laufzeit kriegt man beim Debuggen sogar teilweise eine Fehlermeldung oder erkennt uninitialisierte Zeiger.


Anmelden zum Antworten