私は動的に割り当てられた火星の構造体を指すポインターのベクトルを持っています。私の関数を追加するとうまくいくようですが、私はオブジェクトとポインタの適切な削除をしない私の削除関数を恐れています。あなたは削除機能を見て、どこで問題を解決するか教えてください。あなたは先の尖った(実際にはメモリが解放され、それが再利用可能になります言わせれることはありません)が使用するメモリ領域を解放しますポインタに削除を呼び出すことによってポインタのベクトル内のポインタが指すオブジェクトを削除する
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 - 'によって、あなたは削除しようとしている要素ではなく、ベクトルの最後にある要素を失いました。実際には失われず、無視されます。 –
あなたはどこからでもアイテムをベクトルから削除しないので、次に削除しようとすると解放されたメモリから読み込もうとする可能性があります。 –
これはオープンエンドの質問です。あなたのコードの何が間違っているのかを指摘する一般的なコードレビューは、話題にはなりません。 –