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还是随机还是啥呢?

为啥free函数不在释放内存后,将指针置NULL,野指针有啥用

为啥我们要在 free() 释放内存后清空指针? [复制]

在C语言进行编程中,为啥要释放旧内存?

指针free后还存在吗?

C语言中已经有了malloc和free,为啥还需要new和delete?