Gudden tach liebes Forum
ich kämpfe immoment mit einer for schleife die elemente aus einem Vector "sicher" löchen soll!
Das ist das gute Stück
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
for (vector<CField*>::iterator i = Fields.begin(); i != Fields.end(); i++)
{
if (//bla bla)
{
}
}
|
Soweit so gut jedoch möchte ich nun wenn die if-abfrage korrekt war das entsprechende Element löschen!
Das habe ich mir dann zunächst so gedacht:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
for (vector<CField*>::iterator i = Fields.begin(); i != Fields.end(); i++)
{
if (//bla bla)
{
Fields.erase(i);
}
}
|
So.... Das Programm stürzt ab und zeigt mir diese Meldung:
Expression: list iterator not incrementable.
Naja das interpretiere ich so dass ich anstatt den eintrag in der Liste nun den Interator gelöscht habe
und ich ihn nun nicht mehr hochzählen kann.... korregiert mich bitte falls ich falsch liege.
Zusätzlich dazu möchte ich auch die Zeiger der elemente löschen. Jedoch klappt dies nicht
da ich wenn ich das nächte mal auf die Liste zugreiffe wieder auf die Nase fliege da dann der enstsprechende
iterator Zeiger = NULL ist.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
#define SAFE_DELETE(X) {if (X != NULL) {delete(X);X=NULL;}}
for (vector<CField*>::iterator i = Fields.begin(); i != Fields.end(); i++)
{
if (//bla bla)
{
Fields.erase(i);
SAFE_DELETE(*i);
}
}
|
Ich glaube ich verstehe meine Fehler weiß es leider nur nicht besser....
bitte helft mir
Danke Urprimat