深入理解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语言中的free函数

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

C语言malloc和free【转载】

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

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

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

ptree数据结构分析

1.位置 使用时包含头文件: #include "ptree.h" 2.数据结构 2.1struct ptree /* Patricia tree top structure. */ stru...

C语言之free函数及野指针

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

异步两周年庆/豪送20本图书,1000种图书任你选

**敲重点:** 活动规则:来异步社区选取你想要读的图书,并在本博客评论区留言说一下你对本书的一些感想, 同时关注异步社区CSDN博客,并在博客评论区留言你想要得到的图书。 活动时间...

skip list跳表C语言代码。

skip list(跳表)介绍文章可以看下面的文章 http://kenby.iteye.com/blog/1187303 代码: #include #include #include #in...

Linux内核中的常用宏container_of其实很简单

开发平台:Ubuntu11.04     编 译器:gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4)       Container_of在Linu...
  • npy_lp
  • npy_lp
  • 2011-11-27 19:50
  • 24222

C语言中malloc和free的用法

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

关于C语言中的malloc和free函数的用法

一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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