私はすでにこのスニペットでメモリ リークを見つけようと何千回も試みましたが、惨めなほど失敗しています...メモリ割り当てとこれらのことを学んでいますが、完全に解放されるプログラムを作成することはできませんでしたまだ思い出です…
for ループを呼び出して、140 個の Contato_s 構造体を割り当て、それらを Agenda std::list に入れています。次に、別の for ループを呼び出して、RemoverContato とそれぞれのコードを使用して 140 の連絡先すべてを削除します... Windows は、解放されたメモリの 1 KB を報告しません!
struct Contato_s
{
int Codigo;
std::string Nome, Numero, Email, Apelido;
};
std::list<Contato_s*> Agenda;
void CriarContato(std::string Nome, std::string Numero, std::string Email, std::string Apelido) // Add a contact to the list
{
Contato_s *temp = new Contato_s; // Criando um contato temporario
temp->Nome = Nome;
temp->Numero = Numero;
temp->Email = Email;
temp->Apelido = Apelido;
temp->Codigo = Agenda.size()+1;
Agenda.push_back(temp); // Adicionando o contato a lista
}
int RemoverContato(int Codigo) // Delete a contact from the list
{
for (std::list<Contato_s*>::iterator i = Agenda.begin(), e = Agenda.end(); i != e;)
{
if((*i)->Codigo == Codigo)
{
delete (*i);
i = Agenda.erase(i);
return 1;
} else {
++i;
}
}
return 0;
}
前もって感謝します :)!
- 編集
さて、それは私が連絡先を破壊しようとしている方法です:
for(int i=0; i<140; ++i)
{
if(RemoverContato(1+i) == 0)
std::cout << "Fail removing contact " << i << std::endl;
else
std::cout << "Contact " << i << " removed" << std::endl;
}
(私は常に「連絡先Xが削除されました」と表示され、その部分で失敗しないため、理論的には連絡先が見つかっています)