我已经尝试了一千次来在这个片段中找到该死的内存泄漏,但我只是悲惨地失败了......我正在学习内存分配和这些东西,我永远无法制作一个完全免费的程序它的记忆还...
我正在调用一个 for 循环来分配 140 个 Contato_s 结构并将它们放入 Agenda std::list 中。然后我调用另一个 for 循环来使用 RemoverContato 和相应的代码删除所有 140 个联系人... Windows 不会报告单个 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;
}
(Ofc 我总是得到“联系人 X 被删除”并且在那部分没有失败,所以理论上可以找到联系人)