程序进程结束会自动回收动态分配的空间吗?
作者:Rem ㅤ | 发布时间:
在使用c语言或者c++语言动态分配空间后都需要手动的对空间进行释放,那么如果没有手动的释放,在程序结束后系统会自动回收空间吗?我们做一个小的程序验证一下。
定义一个动态数组并初始化,然后分别在释放空间前后查看一下数组的内容:
using namespace std;
int main()
{
int *t = new int[10];
for (int i = 0; i < 10; i++)
t[i] = i + 1;
cout << *t << endl; //首位数据
cout << &t << endl; // t的地址
delete[] t; // 删除t
cout << *t << endl; //删除后的数据
system("pause");
return 0;
}
结果:

可以看到释放空间后数组的第一个元素的值不再是1.
在执行delete语句前:

执行后:

可以看到执行delete后同一内存空间数据变为乱码。
下面删除delete语句:
using namespace std;
int main()
{
int *t = new int[10];
for (int i = 0; i < 10; i++)
t[i] = i + 1;
cout << *t << endl; //首位数据
cout << &t << endl; // t的地址
// delete[] t; // 删除t
// cout << *t << endl; //删除后的数据
return 0;
}
执行结果:

查看0X61ff08地址内容:
cout<<*((int *)0x61ff08)<<endl;
结果:

有符号整数在内存中是以补码的形式存放,查看6422356的二进制:

由于正数的原码、反码、补码都是整数本身,所以可以看出此结果并不是1的补码。
由此可以证明在程序的进程结束之后程序所申请的空间会被系统自动回收。
标签:学习笔记, c/c++