C++ 内存清理






1.36/5 (5投票s)
演示 C++ 的一项特性,即使用指针动态分配和释放数组。
引言
在本文中,我将演示如何使用指针动态分配和释放二维数组。C++ 的一个重要特性是内存管理,它使我们能够分配内存并在使用完毕后清理它。而在编译成中间语言(如 Java 和 C#)的语言中,垃圾回收不是由开发者控制,而是当内存中分配的对象不再使用时自动完成。但这由操作系统完成,可能会在一段时间内保留一些已分配的内存。
代码
通过包含 iostream 库并使用 std 命名空间来准备 main.cpp 文件。
#include <iostream>
using namespace std;
void main(void)
{
}
在 main() 函数中,声明一个 int 变量来存储数组的大小,并声明一个指向浮点数指针的指针(这可能有点令人困惑……但想象一下你声明了一个指向浮点数的指针,然后你声明一个指针来指向该指针……)。
int size = 7000;
float** MainArray = NULL;
MainArray = new float*[size];
cout <<"Allocating..."<<endl;
for(int i = 0 ; i < size ; i++)
{
float* SubArray = NULL;
SubArray = new float[size];
for(int j = 0 ; j < size ; j++)
{
SubArray[j] = (float)j;
}
MainArray[i] = SubArray;
}
MainArray 应该指向 SubArray,而 SubArray 应该指向浮点数值,因此我们得到一个二维数组。
在分配数组后(开发者可能对它进行一些操作或将其用于存储数据等),我们现在关心的是释放它,这使用关键字 delete 完成,并为其提供一个指向要删除的指针,然后将其赋值为 NULL,如以下代码块所示。
int key = 1 ;
cout << "Press 0 then Enter to clean up the memory" << endl;
cin >> key ;
if(key == 0)
{
for(int i = 0 ; i < size ; i++)
{
delete[] MainArray[i];
MainArray[i] = NULL;
}
delete[] MainArray;
MainArray = NULL;
cout << "Memory cleared" << endl;
}
system("PAUSE");
循环遍历主数组并删除每个指向浮点数的指针,然后在完成主数组指针后删除它。
您可以通过在任务管理器的“进程”选项卡中打开并注意 MemoryCleanUp.exe 的内存使用情况,在按下 0 并 Enter 释放数组之前和之后,来观察清理的效果。就这么简单。