zeigt Ich habe einen Zeigervektor, der auf dynamisch zugewiesene Martian-Strukturen zeigt. Meine Add-Funktion scheint gut zu funktionieren, aber ich habe Angst, dass meine Löschfunktion kein ordnungsgemäßes Löschen von Objekt und Zeiger durchführt. Könnt ihr die Löschfunktion durchsehen und sagen, wo ich das Problem beheben könnte?Löschen des Objekts, das ein Zeiger in einem Zeigervektor auf
struct Martian
{
string fname, lname, ssid;
Martian(string fname, string lname, string ssid) : fname(fname), lname(lname), ssid(ssid){}
};
class martianDatabase
{
public:
vector<Martian*> database;
martianDatabase();
void deleteMartian(string deletedID);
void addMartian(int &i, string f, string l, string id);
int iterator = 0, size = 0;
};
void martianDatabase::addMartian(int& i, string f, string l, string id)
{
this->database.push_back(new Martian(f, l, id));
i++;
}
void martianDatabase::deleteMartian(string deleteID)
{
int i = 0;
while (i < size +1)
{
if (this->database[i]->ssid == deleteID){
delete this->database[i];
size--;
break;
}
else ++i;
}
}
Woher haben Sie 'Größe'? und durch "size -" haben Sie das Element verloren, das sich am Ende des Vektors befindet und nicht das Element, das Sie löschen möchten. Und nicht wirklich verloren, aber ignoriert. –
Sie entfernen das Element nicht aus dem Vektor, also versuchen Sie beim nächsten Versuch, das Element zu löschen, aus dem Speicher, der freigegeben wurde. –
Dies ist eine offene Frage. Generische Codeüberprüfungen, die darauf hinweisen, was in Ihrem Code nicht stimmt, sind nicht Thema. –