Ich finde meinen Fehler nicht



  • Ich hoffe es mit wenig Code verständlich zu machen worum es geht.
    Natürlich hab ich schon den Debugger benutzt aber ich kapier es nicht warum das Programm abstürzt.

    Also ich hab einen vector players. Da stehen die Adresse von Teilnehmerklassen drinne (definitiv! Wurden auch per new erstellt, also Objekte keine Instanzen).
    Für jeden Teilnehmer soll nun etwas geprüft werden und in einer Datei gespeichert werden:

    for(int i=0; i<players.size(); ++i)
    		{
    			// Create for each player a logfile
    			ofstream PlayerLogfile((players[i]->GetID()+".log").c_str(), ios::app);
    
    			PlayerLogfile.close();
    		}
    

    Soweit so gut, nur wenn ich dazwischen eine Funktion aufrufe schmiert das Programm ab 😡 😡 😡

    for(int i=0; i<players.size(); ++i)
    		{
    			// Create for each player a logfile
    			ofstream PlayerLogfile((players[i]->GetID()+".log").c_str(), ios::app);
    
    			CheckSentReceivedDifference(*players[i], PlayerLogfile);
    
    			PlayerLogfile.close();
    		}
    

    Hier die Funktion

    void CheckSentReceivedDifference(Player &player, ofstream PlayerLogfile)
    {	
    /* Alles auskommentiert, in der Funktion steht wirklich gar nichts drinne! Deshalb bin ich so ratlos */
    }
    

    Wie kann der da abstürzen? Der Fehler liegt 100% bei der Funktion, hab auskommentiert, getestet, weiter auskommentiert usw.



  • 1. Ich würde PlayerLogFile per Referenz übergeben: ofstream & PlayerLogfile
    2. Schreib mal was in den Stream.
    3. Wie sieht der Backtrace aus?



  • Nun wird Playerlogfile per Referenz übergeben, hat leider nichts geändert.

    Wenn ich in den Stream schreibe klappt alles, aber irgendwie nur für den ersten Player. Kann es sein das bei der Art der Übergabe der Player aus dem vector gelöscht wird?

    was meinst du mit backtrace 😕



  • durchdreh schrieb:

    was meinst du mit backtrace 😕

    Du startest im debugger, wartest bis der Absturz kommt und läßt dir dann den Backtrace geben.

    Beim gdb ist das der Befehl: where

    Oder du startest das Programm direkt mit valgrind und schaust, was es so gibt.



  • Vermutung hatte sich bestätigt... alleine durch den aufruf der funktion wurde der übergebende klasse gelöscht... 😡


Anmelden zum Antworten