我希望这个问题不要被否决。在问这个问题之前,我做了很多研究。
我正在尝试释放使用new
和delete
运算符分配的内存。分配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运算符感到好奇。