我有一個指向動態分配的火星結構的指針向量。我的添加功能似乎工作正常,但我害怕我的刪除功能沒有做適當的刪除對象和指針。你們可以通過刪除功能看看,並告訴我該如何解決問題?刪除指針向量中的指針指向的對象
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;
}
}
你從哪裏得到'size'?並按'大小 - '丟失了位於矢量末尾的元素,而不是你想要刪除的元素。而不是實際失去,但忽略。 –
您不會從任何地方將該項目從矢量中移除,因此下次嘗試刪除時,您可能會嘗試從已釋放的內存中讀取數據。 –
這是一個開放式問題。通用代碼評論指出你的代碼有什麼問題是脫離主題。 –