动态分配内存的释放空间测试

#include<iostream>
#include<vector>
using namespace std;

int main() {
	vector<int*>* pv{ new vector<int> };
	
	size_t n{};

	cin >> n;

	for (size_t i{}; i < n; ++i) 
		(*pv).push_back(new int[n]);
	
	/*----------------使用后----------------*/

	for (size_t i{}; i < n; ++i) delete[](*pv)[i];
	
	delete pv;

	return 0;
}

像上面的定义

使用完后

delete pv;

for (size_t i{}; i < n; ++i) delete[i];

delete pv;

所释放的内存空间一样吗?

测试一:只delete pv

  • 测试代码
#include<iostream>
#include<vector>
using namespace std;

int main(){
	cout << "第一次断点,程序开始,继续将在自由存储区定义变量." << endl;
	system("pause");
	vector<int*> *pv {new vector<int*>};
	size_t n{};
	
	cout << "n = ";
	cin >> n;
	
	cout << "第二次断点,继续将分配n*n空间." << endl; 
	system("pause");
	for(size_t i{}; i < n; ++i){
		pv[0].resize(pv[0].size() + 1);
		pv[0][i] = new int[n];
	}
	
	cout << "第三次断点,继续将释放空间." << endl;
	system("pause");
	delete pv;
	
	cout << "第四次断点,继续程序结束." << endl;
	system("pause");
	return 0;
}
  • 执行过程

在这里插入图片描述在这里插入图片描述
2.
在这里插入图片描述在这里插入图片描述
3.
在这里插入图片描述
在这里插入图片描述
4.在这里插入图片描述
在这里插入图片描述
5.
在这里插入图片描述
在这里插入图片描述

  • 第三次断点继续释放空间后可以看到内存没有多大变化

  • 说明

  • int

  • 类的内存还没有被释放

测试二:加上delete [](*pv)[i]

  • 测试代码
#include<iostream>
#include<vector>
using namespace std;

int main(){
	cout << "第一次断点,程序开始,继续将在自由存储区定义变量." << endl;
	system("pause");
	vector<int*>* pv{new vector<int*>};
	size_t n{};
	
	cin >> n;
	
	cout << "第二次断点,继续将分配n*n空间." << endl; 
	system("pause");
	for(size_t i{}; i < n; ++i){
		pv[0].resize(pv[0].size() + 1);
		pv[0][i] = new int[n];
	}
	
	cout << "第三次断点,继续将释放空间." << endl;
	system("pause");
	for(size_t i{}; i < n; ++i) delete []pv[0][i];
	delete pv;
	
	cout << "第四次断点,继续程序结束." << endl;
	system("pause");
	return 0;
}
  • 执行过程

在这里插入图片描述
在这里插入图片描述
2.
在这里插入图片描述
在这里插入图片描述
3.
在这里插入图片描述
在这里插入图片描述
4.
在这里插入图片描述
在这里插入图片描述
5.
在这里插入图片描述
在这里插入图片描述

  • 第三次断点继续后释放内存

  • 被占用内存成功释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值