如何修复valgrind报告的c ++数组析构函数中的内存泄漏?

时间:2017-03-07 07:13:30

标签: c++ arrays memory-leaks valgrind destructor

我用valgrind测试了我的应用程序,它说了一个与数组销毁有关的行号。 原始代码是:

    if ((int)buf.grid -> capacity() >size)
     {
      vector <TPval> *ns= new vector <TPval>;
       {
        *ns= *buf.grid;
         delete buf.grid;
         buf.grid=ns;
        }
       }

有人知道如何修复此部分的内存泄漏吗?

1 个答案:

答案 0 :(得分:0)

除了评论中提到的问题之外,如果在

期间抛出异常,此代码也可能泄漏
*ns= *buf.grid;

解决发生任何泄漏的最佳方法是用

替换整个块
buf.grid->shrink_to_fit();

这是一个C ++ 11功能,可能无法使用,所以你也可以试试

  vector<TPval> ns = *buf.grid;
  std::swap(*buf.grid, ns);

在条件内。