65.9K
CodeProject 正在变化。 阅读更多。
Home

C++ 内存清理

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.36/5 (5投票s)

2009年3月25日

CPOL

2分钟阅读

viewsIcon

44922

演示 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 释放数组之前和之后,来观察清理的效果。就这么简单。

© . All rights reserved.