Mysteriöser std::list Fehler
-
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_HDie 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.