我用valgrind测试了我的应用程序,它说了一个与数组销毁有关的行号。 原始代码是:
if ((int)buf.grid -> capacity() >size)
{
vector <TPval> *ns= new vector <TPval>;
{
*ns= *buf.grid;
delete buf.grid;
buf.grid=ns;
}
}
有人知道如何修复此部分的内存泄漏吗?
答案 0 :(得分:0)
除了评论中提到的问题之外,如果在
期间抛出异常,此代码也可能泄漏*ns= *buf.grid;
解决发生任何泄漏的最佳方法是用
替换整个块buf.grid->shrink_to_fit();
这是一个C ++ 11功能,可能无法使用,所以你也可以试试
vector<TPval> ns = *buf.grid;
std::swap(*buf.grid, ns);
在条件内。