簡體   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