深入理解C语言中的free函数。

原创 2009年12月10日 12:32:00

#include<stdio.h>
#include<stdlib.h>
int main(){
    int *test=(int *)calloc(1,sizeof(int));
    if(!test)
        printf("分配内存错误/n");
    else{
        printf("指针地址:%X/n",(unsigned int)test);
        printf("指向内存的内容:%d/n",*test);
        printf("释放它/n");
        free(test);
        printf("释放后,指针的地址:%X/n",(unsigned int)test);
        printf("释放后,指针指向的内存的内容:%d/n",*test);
    }
    return 0;
}
    通过上面的小程序,可以看出,在free前后,指针test并没有改变,那么free到底怎么工作呢?
    查看man 3 free,其中也没有说明白,只是说free释放掉指定参数指针指向的内存,并返回void。其实,free函数只是将参数指针指向的内存归还给操作系统,并不会把参数指针置NULL,为了以后访问到被操作系统重新分配后的错误数据,所以在调用free之后,通常需要手动将指针置NULL。从另一个角度来看,内存这种底层资源都是由操作系统来管理的,而不是编译器,编译器只是向操作系统提出申请。所以free函数是没有能力去真正的free内存的。只是告诉操作系统它归还了内存,然后操作系统就可以修改内存分配表,以供下次分配。

相关文章推荐

C语言malloc和free【转载】

在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两...
  • r91987
  • r91987
  • 2011年04月20日 21:29
  • 38926

C语言malloc和free实现原理

1,debug版本 malloc最终调用d

C语言之free函数及野指针

【FROM MSDN && 百科】 原型:  void free(void *ptr); #include或#include Deallocate space in memor...

C语言中malloc和free的用法

      在C里,内存管理是通过专门的函数来实现。另外,为了兼容各种编程语言,操作系统提供的接口通常是C语言写成的函数声明(Windows 本身也由C和汇编语言写成)。 包含的头文件为:   a...

C语言中的free函数

一、动态存储分配 在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。 例如: int n;     scanf("%d",&n); int...
  • henulwj
  • henulwj
  • 2012年11月28日 14:33
  • 9478

对于C语言free()函数的一些反思

上周在解决一道课后习题的时候,偶然间发现了一个自己从未注意过的问题,问题描述如下: 在遍历一个循环链表时,我发现在我调用free()函数删除了一个节点之后,仍然能用printf打印出原先的数据,起初我...

C语言的malloc()和free()函数原理【整理】

一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如...
  • llhyy17
  • llhyy17
  • 2010年03月12日 21:01
  • 9166

[C/C++] free()函数和iOS release--(重点free函数)整理汇总

iOS-chat中遇到函数free,特此专门对FREE函数进行下详细jie'sha void FreeAddresses() { int i; for (i=0; i...

C语言 malloc/free和C++中new/delete的区别

1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 原型:extern void *malloc(unsigned int num_b...

free()函数的用法

free()的调用方式是:void   free(void   *ptr)。是释放由ptr所指的内存,并将它返回给堆,以便这些内存成为再分配时的可用内存。free()函数只能用于以前由动态地址分配的函...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入理解C语言中的free函数。
举报原因:
原因补充:

(最多只允许输入30个字)