#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.
-
第三次断点继续后释放内存
-
被占用内存成功释放