std::vector element löschen

TimN

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem:
Wenn ich ein Element aus einem std::vector löschen will funktioniert das einwandfrei, aber wenn es das hinterste Element aus dem vector ist, stürzt das Programm ab. Also wenn ich z.B. diesen vector habe: "a", "b", "c", "d" kann ich z.B. das "b" löschen, das ist kein Problem, aber wenn ich versuche das "d" zu löschen (auch wenn "a", "b", "c" vorher nicht gelöscht wurden) stürzt der Mist ab :(

Woran liegt das?

Ich lösche die Elemente folgendermaßen:
Code:
    std::vector<Inventory_Item>::iterator it = items_backpack.begin() + id;
    items_backpack.erase(it);
 
Hallo,
Hallo,

ich habe folgendes Problem:
Wenn ich ein Element aus einem std::vector löschen will funktioniert das einwandfrei, aber wenn es das hinterste Element aus dem vector ist, stürzt das Programm ab. Also wenn ich z.B. diesen vector habe: "a", "b", "c", "d" kann ich z.B. das "b" löschen, das ist kein Problem, aber wenn ich versuche das "d" zu löschen (auch wenn "a", "b", "c" vorher nicht gelöscht wurden) stürzt der Mist ab :(

Woran liegt das?

Ich lösche die Elemente folgendermaßen:
Code:
    std::vector<Inventory_Item>::iterator it = items_backpack.begin() + id;
    items_backpack.erase(it);

Wie groß wird denn dein id maximal? Wenn du einen vector der Größe n hast, sollte id nicht größer als n-1 werden.

Gruß,
RedWing
 
id ist immer kleiner als size. Ich habe es gerade nochmal getestet. Zu dem Zeitpunkt wo der Fehler auftrat, war size = 4 und id = 3.
 
Hallo

RedWing hat auf jeden fall recht !

std::vector<char> m_myvector;

m_myvector.push_back('a');
m_myvector.push_back('b');
m_myvector.push_back('c');
m_myvector.push_back('d');

std::vector<char>::iterator it = m_myvector.begin()+3;

m_myvector.erase(it);

T !
 
Hallo,

das funktioniert bei mir eigtl. auch ohne Probleme.
Es kann höchstens noch sein das du an anderer Stelle irgendwo über den Speicher hinausschreibst und der Fehler aber an dieser Stelle des Programms auftritt.

Gruß,
RedWing
 
Whaaaaa! Ich habe den Fehler gefunden! Ich habe ein bisschen später im Programm nochmal auf das gelöschte Objekt zugegriffen. Wenn jetzt ein anderes Objekt als das letzte gelöscht wurde, war das kein Problem, weil ja ein neues "nachgerutscht" ist. Aber beim Letzten geht das natürlich net :rolleyes:
 
Zurück