首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有指针的二维数组中的内存泄漏

带有指针的二维数组中的内存泄漏
EN

Stack Overflow用户
提问于 2019-02-09 20:05:32
回答 1查看 71关注 0票数 0

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

代码语言:javascript
复制
   // 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吗??(我试过了,但它不起作用)我只是不知道它泄漏在哪里?

EN

回答 1

Stack Overflow用户

发布于 2019-02-09 22:30:48

尚不完全清楚为什么valgrind声称内存正在泄漏,但很明显,您的循环中存在越界访问。

代码语言:javascript
复制
temp_pointer[i][columns] = myvalue;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54606044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档