Brauche Hilfe bei: std:badalloc
Hallo!
Bin dabei für die Uni ein Programm zu schreiben welches einen Büchereiverband hält. Also Filialen, Kunden, Angestellte, Medien einließt aus einer XML und wieder auf der Konsole ausgibt.
Da ich gestern mein Programm iwie komplett zerschossen habe, habe ich die Gelegenheit genutzt um meine load-Methode, welche ich vorher mit enums realisiert habe, um die verschiedenen Tags und Aufrufe zu unterschieden, neu zu machen. Jetzt stoße ich aber auf Probleme, welche ich vorher nicht hatte...
Konkret:
terminate called after throwing an instance of 'std::bad_allic'
what(): std::bad_alloc
Ich bin davon ausgegangen, dass es davon kommt, dass ich in einer Klasse z.B. eine anderes Objekt in einen Vector gebe und das eben zerstört wird wenn die Methode beendet wird. Allerdings hat es auch nicht geholfen nur die Pointer zu halten...
Hier mal der Code:
LibaryPool.cpp (Auszug):
load->chef funktioniert... (das auskommentierte add ist eigentlich eine Methode welche nur das libs.push_back drin hat...).
LibaryPool.h (Auszug)
Konstruktor von TLibary:
Libray.cpp (Auszug)
Dieses Cout wird mir noch angezeigt. Das cout nach dem new in LibaryPool.cpp kommt schon nicht mehr...
Debugger sagt:
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb (GDB) 7.6.1
Child process PID: 7908
In __cxa_throw () ()
Kann mir da jemand weiter helfen?
P.S.
Ja ich weiß das heißt Library ... xD
Bin dabei für die Uni ein Programm zu schreiben welches einen Büchereiverband hält. Also Filialen, Kunden, Angestellte, Medien einließt aus einer XML und wieder auf der Konsole ausgibt.
Da ich gestern mein Programm iwie komplett zerschossen habe, habe ich die Gelegenheit genutzt um meine load-Methode, welche ich vorher mit enums realisiert habe, um die verschiedenen Tags und Aufrufe zu unterschieden, neu zu machen. Jetzt stoße ich aber auf Probleme, welche ich vorher nicht hatte...
Konkret:
terminate called after throwing an instance of 'std::bad_allic'
what(): std::bad_alloc
Ich bin davon ausgegangen, dass es davon kommt, dass ich in einer Klasse z.B. eine anderes Objekt in einen Vector gebe und das eben zerstört wird wenn die Methode beendet wird. Allerdings hat es auch nicht geholfen nur die Pointer zu halten...
Hier mal der Code:
LibaryPool.cpp (Auszug):
while (getline(datainput,tmp))
{
int posi1 = tmp.find("<");
int posi2 = tmp.find(">");
int posi3 = tmp.find("</",posi2);
string tmpWert = tmp.substr(posi2+1,posi3-posi2-1);
string tmpTag = tmp.substr(posi1+1,posi2-posi1-1);
cout << "LibraryPool: "<< tmpTag << " mit dem Wert: " << tmpWert << endl;
// cout << tmpTag << " mit dem Wert:: " << tmpWert << endl;
if (tmpTag == "Library"){
libs.push_back(new TLibary);
//add(new TLibary)
cout << "load Library";
}else if ("Chairman" == tmpTag){
cout << "load Chef";
chef->load(datainput);
}
LibaryPool.h (Auszug)
vector<TPerson*> customers;
vector<TLibary*> libs;
Konstruktor von TLibary:
Libray.cpp (Auszug)
TLibary::TLibary()
{
cout << "Library-Konstrukt";
//ctor
}
Debugger sagt:
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb (GDB) 7.6.1
Child process PID: 7908
In __cxa_throw () ()
Kann mir da jemand weiter helfen?
P.S.
Ja ich weiß das heißt Library ... xD
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 340191
Url: https://administrator.de/contentid/340191
Ausgedruckt am: 01.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
sieht aus als hättest du wenig RAM bzw. generell ein Memoryleak.
Die Referenz zu bad_alloc ist da recht eindeutig.
Aber mit Gewissheit kann man das so nicht einfach sagen, denn die wirklich wichtigen Stellen fehlen hier.
Es gibt aber noch andere Fälle wo dieser Fehler auftreten kann:
https://stackoverflow.com/a/8397204
Eine recht allgemein gehaltene Referenz auch hier nochmal:
https://stackoverflow.com/questions/9456728/how-to-deal-with-bad-alloc-i ...
Und all diese Hinweise und viele mehr sind auch sehr schnell und einfach zu finden: https://is.gd/uX065I
Ich hoffe es hilft und erleichtert dir die Arbeit in Zukunft etwas...
Gruß
Chris
sieht aus als hättest du wenig RAM bzw. generell ein Memoryleak.
Die Referenz zu bad_alloc ist da recht eindeutig.
Aber mit Gewissheit kann man das so nicht einfach sagen, denn die wirklich wichtigen Stellen fehlen hier.
Es gibt aber noch andere Fälle wo dieser Fehler auftreten kann:
https://stackoverflow.com/a/8397204
Eine recht allgemein gehaltene Referenz auch hier nochmal:
https://stackoverflow.com/questions/9456728/how-to-deal-with-bad-alloc-i ...
Und all diese Hinweise und viele mehr sind auch sehr schnell und einfach zu finden: https://is.gd/uX065I
Ich hoffe es hilft und erleichtert dir die Arbeit in Zukunft etwas...
Gruß
Chris