【问题标题】:Memory leak with lists c++列表c ++的内存泄漏
【发布时间】:2016-06-15 11:02:42
【问题描述】:

该函数的思想是将原始列表分成X个列表,全部聚集在一个数组中,既不删除也不创建新单元格。 该功能做得很好,但是当我用 valgrind 或 Dr. Memory 检查泄漏时,它似乎有一些泄漏问题......

List* function (List & todivide, int t = 2){
  Cell* aux = todivide.l;       // l is the head of the list
  int tam = (todivide.size()/t == 0) ? todivide.size()/t : todivide.size()/t+1;
  List* arrayoflists = new List [tam];

  for(int i = 0, k = 0; aux != 0; i++){
      if(i%t == 0){
          arrayoflists[k].l = aux;
          aux = aux->sig;
          k++;
      }
      if(i%t == t-1){
          Cell* p = aux->sig;
          aux->sig = 0;
          aux = p;
      }
  }
  l.l = 0;

  return arrayoflists;
}

我看不出有什么问题...有什么想法吗?

提前致谢

【问题讨论】:

  • 显示的代码没有问题。因此,泄漏必须要么在未显示的代码中,要么与已显示的代码和未显示的代码结合使用。为了避免浪费时间寻找内存泄漏,请学习如何使用std::shared_ptr
  • 我知道这与主要问题无关,但您不想写(todivide.size()%t == 0) 吗?

标签: c++ memory-leaks


【解决方案1】:

函数内部没有任何问题,但是由于您返回一个使用 new 创建的指针,因此您可能忘记在函数外部使用返回的指针时删除它。

【讨论】:

  • 你说得对,我尝试:“delete [] arrayoflist”在接收到主数组并修复泄漏后...我不明白为什么我必须这样做确实我已经声明了析构函数...
  • 嗯,那么可能是析构函数出了问题。不过很高兴你能把它修好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 2016-01-27
  • 2010-11-11
  • 2017-02-18
  • 1970-01-01
相关资源
最近更新 更多