C语言free释放内存后为啥指针里的值不变?竟然还可以输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言free释放内存后为啥指针里的值不变?竟然还可以输出相关的知识,希望对你有一定的参考价值。
看来你并未弄清楚“释放”的意思。释放是说把“原来指针指向的内存空间交还给系统”,由系统重新支配——因为用malloc分配后那部分内存就由你的代码支配而系统支配不了了。那么free后,尽管交还了系统,但还在系统没有重新使用这块内存时,它里面的数据没有改变,你当然可以读出来——因为内存中的数据无论有效或无效,都要等到下一次写入才能改变,否则是永久保留的! 参考技术A 没毛病啊,释放后系统或程序暂时没有使用这段内存地址。动态内存
在c语言中是malloc
用法:#include
或#include<stdlib.h>
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)表示指针.
用free()释放内存
举例:
// malloc.c
#include
#include
main()
{
char *p;
clrscr(); // clear screen
p=(char *)malloc(100);
if(p)
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");
if(p)
free(p);
getchar();
return 0;
}
在c++中是new;
用delete()释放内存
#include"iostream"
using namespace std;
struct aaa
{
int a;
int c;
};
int main()
{
aaa * fp = new aaa[10];//申请内存的大小
fp->a = 10;//因为动态申请的内存没有名字,也不知道其地址,但它确实是存在的,通过指针来访问。
fp->c=20;
cout << fp->a << "," << fp->c << endl;
}
以上是关于C语言free释放内存后为啥指针里的值不变?竟然还可以输出的主要内容,如果未能解决你的问题,请参考以下文章
请问C语言free(p)释放p所指向的动态内存后p指向哪?是NULL还是随机还是啥呢?