Komisches assertion failed
-
Hi!
Ich habe ein komisches Problem:
class Menu { std::vector<std::string> m_Lines; public: Menu::~Menu(); //... void AddEntry(const std::string& s); void Init(); }; void Menu::Init() { m_Lines.clear(); } void Menu::AddEntry(const std::string& s) { m_Lines.push_back(s); } Menu::~Menu() { m_Lines.clear(); } // Hauptprogramm Menu menu; int main { menu.Init(); menu.AddEntry("Eine _Zeile"); } // Am Ende, wenn der Dstruktor von Menu aufgerufen wird, dann // kommt assertion failed bei der Zeile m_Lines.clear();
Hat einer ne Ahnung, warum?
-
Der Fehler müsste woanders sein, so ist das alles korrekt.
Aber die beiden clear()-Aufrufe kannst du dir eh schenken.
-
Du umgehst geschickt komfortablere Konstruktoraufrufe, indem du eine Init Methode verwendest.
Der Destruktor von menu wird, btw, deshalb erst nach verlassen von main aufgerufen.
-
klappt immer noch nicht. Der Fehler kommt aber wirklich nur, wenn ich AddEntry() aufgerufen habe.
-
#include <string> #include <vector> class Menu { std::vector<std::string> m_Lines; public: Menu::~Menu(); //... void AddEntry(const std::string& s); void Init(); }; void Menu::Init() { m_Lines.clear(); } void Menu::AddEntry(const std::string& s) { m_Lines.push_back(s); } Menu::~Menu() { m_Lines.clear(); } // Hauptprogramm Menu menu; int main () { menu.Init(); menu.AddEntry("Eine _Zeile"); } // Am Ende, wenn der Dstruktor von Menu aufgerufen wird, dann // kommt assertion failed bei der Zeile m_Lines.clear();
Exakt dieser Code? Kompiliert bei mir fehlerfrei und wird auch korrekt ausgeführt. Der Fehler liegt woanders. Ich nehme an, du hast noch mehr Code in deinen Funktionen? Manchmal geht auch etwas schief, weil etwas anderes nicht korrekt war. Dann wirkt sich der Fehler erst später auf. Also: mehr Code.