繁体   English   中英

带指针的2D数组中的内存泄漏

[英]memory leak in a 2D array with pointers

我有一个使用2D数组的函数,我想将数据从一个数组复制到另一个数组,并且我使用了tmp数组,但是valgrind一直说我内存泄漏。 我不知道为什么。 以下是功能的一部分。

   // valgrind gave me error as operator new[] (unsigned long) for the following line
   T** temp_pointer = new T*[rows];
   for (int i=0; i < rows; i++) {
            temp_pointer[i] = new T[columns];
   }

   for (int i =0; i< rows; i++) {
      for (int j =0; j < (columns-3); j++) {
             temp_pointer[i][j] = Arry[i][j];
    }
      temp_pointer[i][columns -3 ] = myvalue1;
      temp_pointer[i][columns-2] = myvalue2;
      temp_pointer[i][columns-1] = myvalue3;
   }
   for ( int i =0; i< rows; i++)
         delete [] Arry[i];

    delete [] Arry;
    Arry= temp_pointer;

我也有一个析构函数,它递归删除Arry指针。 Arry是模板类的私有成员。

我只是不知道为什么这是内存泄漏。 我应该递归删除temp_pointer吗? (我尝试过,但它没有用)我只是不知道它在哪里泄漏?

尚不清楚为什么valgrind声称内存正在泄漏,但是您显然在循环中具有超出范围的访问。

temp_pointer[i][columns] = myvalue;

数组的最后一个元素的索引不是其size ,而是(size-1) 写入数组边界之外的位置可能会破坏内存分配器的内部管理信息,并导致valgrind抱怨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM