我有一个指向动态分配的火星结构的指针向量。我的添加功能似乎工作正常,但我害怕我的删除功能没有做适当的删除对象和指针。你们可以通过删除功能看看,并告诉我该如何解决问题?删除指针向量中的指针指向的对象
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'?并按'大小 - '丢失了位于矢量末尾的元素,而不是你想要删除的元素。而不是实际失去,但忽略。 –
您不会从任何地方将该项目从矢量中移除,因此下次尝试删除时,您可能会尝试从已释放的内存中读取数据。 –
这是一个开放式问题。通用代码评论指出你的代码有什么问题是脱离主题。 –