使用删除无法完全清除内存

时间:2018-06-28 11:50:30

标签: c++ pointers new-operator delete-operator

我希望这个问题不要被否决。在问这个问题之前,我做了很多研究。 我正在尝试释放使用newdelete运算符分配的内存。分配1M x 2矩阵后,系统监视器显示a.out文件的使用量约为38.2MB。合并clearMemory()函数后,使用量显示为30.7 MB。

这是功能和主要代码:

#include <iostream>

using namespace std;

//-------------------------Function to clear memory-----------------------------
void clearMemory(int **matrix, int rows)
{
  for(int i = 0; i < rows; i++)
  {
    delete [] matrix[i];
    matrix[i]   = NULL;
  }

  delete [] matrix;
  matrix = NULL;
  cout<<"\nMemory cleared\n";
}


int main()
{

  int rows=1000000, cols=2;
  int **matrix;
  matrix = new int*[rows];

  for(int i = 0; i<rows; i++)
  {
    matrix[i] = new int[cols];
    for(int j = 0; j<cols; j++)
    {
      matrix[i][j] = 1;
    }
  }
  // matrix occupies about 38.2MB in my system.


 clearMemory(matrix, rows);

 while(1){}
 // To pause the program in order to check the system monitor for RAM usage.


 return 0;
}

我的问题是,为什么内存没有完全释放?使用delete运算符是否有限制,因为delete适用于较小的矩阵,但是对于像这样的超大型矩阵,它似乎无法正常工作?

PS :如果这是一个琐碎的问题,请原谅我。我似乎真的无法独自找到解决此问题的方法。

PPS :我知道使用向量可能是一种更好的做法,但只是对指针的new和delete运算符感到好奇。

0 个答案:

没有答案