Mysteriöser std::list Fehler



  • Hab ein kleines Problem
    Ich habe eine Klasse 1 in der eine std::list mit Zeigern auf Elemente der Klasse 2 verwaltet wird.

    in K1 (private), K2 = Population

    std::list<Population*> Populationen;

    Immer wenn ich in K1 irgendwie die Liste verwende stürtzt das Programm ab (push_back, clear)

    Die Klasse K2 lässt sich problemlos erstellen.
    Wenn ich die liste in Main() anlege habe ich ebenfalls keine Probleme.

    Wenn es hilfreich ist kann ich noch Backtrace bzw Memorymap posten

    Hat jemand eine Idee woran es liegen kann?



  • Du kannst uns einen auf das Wesentliche reduzierten Sourcecode zeigen, der den Fehler auch zeigt. Unsere Glaskugeln sind zur Zeit alle in der Reinigung und zu raten ist immer so ungenau.



  • Die Übergeordnete Klasse

    #ifndef WELT_H
    #define WELT_H
    #include <list>
    #include"population.h"
    
    class Welt
    {
    public: 
    
        void create_Population(); //HALTEPUNKT 1
    
    private:
    
        std::list<Population*> Populationen;
    };
    
    #endif // WELT_H
    

    Die untergeordnete Klasse ( Population )

    #ifndef POPULATION_H
    #define POPULATION_H
    #include "lebewesen.h"
    #include "sensor.h"
    #include "aktor.h"
    #include "emitter.h"
    #include <list>
    class Population{
    
    public:
    
            //einige public Funktionen
    
    private:
           std::list<Lebewesen*> Bestand;
           std::list<emitter*> emitters;
           std::list<int> avg_fitness;
           std::list<int> best_fitness;
           int max_worm;
    
    };
    

    In HALTEPUNKT 1 will ich ein Element der Klasse Population dynamisch erstellen und zu Liste Populationen hinzufügen. Leider verweigert mir die Liste jeglichen Dienst, das Programm stürzt bei jeder Listenoperation kommentarlos ab.



  • Und der Code von create_Population()?



  • Population *Pop = new Population;
    this->Populationen.push_back(Pop);
    

    Bei push_back stürzt das Programm ab



  • Tipp: Falscher Operator.



  • hm grübel
    this ist ein Zeiger und benötigt dementsprechend einen Pfeil. Damit habe ich bereits referenziert und deshalb sollte auch der Punkt danach stimmen. Oder meinst du etwas anderes



  • Achso, ja - sorry, hab mich verlesen.



  • Mir fällt nix falsches auf. Minimalbeispiel kompiliert auch ohne Probs:

    #include <list>
    
    //Inhalt irrelevant
    class foo
    {
    public:
    private:
    };
    
    class a
    {
    public:
    	void create()
    	{
    		foo *fong = new foo;
    		this->fuck.push_back(fong);
                    this->fuck.pop_back(fong);
    	}
    
    private:
    	std::list<foo*> fuck;
    };
    
    int main()
    {
    	a b; 
    	b.create();
    	return 0;
    }
    

    Irgendetwas weggelassen?

    edit: Sicher, dass der Fehler bei push_back auftritt? Was macht der Konstruktor von Population?



  • Der Konstruktor mach nicht viel: Population(){max_worm = 0;}

    Allerdings ist mir gerade folgendes aufgefallen. Bei der Überwachung der lokalen Variablen :

    Populationen <nicht im Bereich>
    emitters <nicht im Bereich>

    hier sollte eigentlich < 0 items> stehen

    Aussderdem steht statt einem hexwert für die Adresse der Liste kein Wert



  • Ok Problem gelöst. Habe Klasse Welt falsch initialisiert. Die zuweisung des Zeiger erfolgte erst nach dem Aufruf create_population(). Somit hatte der Zeiger auf die Klasse Welt einen undefinierten Wert.

    Danke für die vielen Antworten. Eigentlich hätte ich das früher merken sollen



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten