分享

malloc函数和free函数 - 计算机应用 - 同江职教网 -- 职业教育 外语教程 ...

 浮 生 2009-04-22
malloc函数和free函数

 

 

[ 录入者:tjzj | 时间:2008-10-25 17:35:02 | 作者: | 来源: | 浏览:238次 ]

<<同江职教网欢迎你---累了听会歌吧--奥运主题歌 我和你>>

 

假设您的程序在执行过程中需要分配一定量的内存。您可以随时调用malloc函数从堆中申请一块内存。在操作系统为您的程序预留出这块内存,之后您就可以随意使用它了。用完之后,要使用free函数将这块内存返回给操作系统进行回收。以后其他程序还可以按自己的需要预留这块内存。

作为例子,下面的代码演示了最简单的使用堆的方法:

int main()
{
int *p;

p = (int *)malloc(sizeof(int));
if (p==0)
{
printf("错误:内存不足n");
return 1;
}
*p=5;
printf("&dn", *p);
free(p);
return 0;
}

 

程序的开始调用了malloc函数,这个函数做了三件事:

  1. malloc语句首先检查堆上的空闲内存总数,然后判断:“有没有足够的空闲内存可以分配一个所申请的大小的内存块呢?”申请的内存块大小是由传入malloc的参数确定的——本例中的sizeof(int)是4个字节。若内存不足,malloc函数会返回零地址告知发生的错误(零地址的另一种表示是NULL,它在C代码中很常用)。否则malloc函数继续执行。

     

  2. 若堆上有足够的内存,系统就从堆上“分配”或“预留”出指定大小的内存块。预留的目的是为了防止多个malloc语句恰巧使用同一个内存块。

     

  3. 接下来系统将预留出的内存块的地址保存到指针变量中(本例中就是p)。指针变量本身保存了一个地址。被分配的内存块能够存储一个指定类型的数值,而指针正是指向此数值。
下图显示了调用malloc之后的内存状态:

 

右边的方框表示malloc分配的内存块。
右边的方框表示malloc分配的内存块。

接着程序用if (p==0)检查指针p以确定分配申请成功(此行也可写成if (p==NULL)甚至if (!p))。如果分配失败(p等于零),则程序终止,否则程序将分配的内存块初始化为5,然后打印内存块的值,接着调用free函数将内存块返还给堆,最后退出。

前面的章节有一段代码是将p赋值为一个现成整数i的地址,而本例中的代码和那段代码实际上并无不同。区别只是在于:对于变

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多