关闭

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

标签: 语言c编译器null工作
13006人阅读 评论(2) 收藏 举报
分类:

#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内存的。只是告诉操作系统它归还了内存,然后操作系统就可以修改内存分配表,以供下次分配。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:540929次
    • 积分:6982
    • 等级:
    • 排名:第3246名
    • 原创:141篇
    • 转载:1篇
    • 译文:0篇
    • 评论:104条
    最新评论