<<同江职教网欢迎你---累了听会歌吧--奥运主题歌 我和你>>
假设您的程序在执行过程中需要分配一定量的内存。您可以随时调用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函数,这个函数做了三件事:
- malloc语句首先检查堆上的空闲内存总数,然后判断:“有没有足够的空闲内存可以分配一个所申请的大小的内存块呢?”申请的内存块大小是由传入malloc的参数确定的——本例中的sizeof(int)是4个字节。若内存不足,malloc函数会返回零地址告知发生的错误(零地址的另一种表示是NULL,它在C代码中很常用)。否则malloc函数继续执行。
- 若堆上有足够的内存,系统就从堆上“分配”或“预留”出指定大小的内存块。预留的目的是为了防止多个malloc语句恰巧使用同一个内存块。
- 接下来系统将预留出的内存块的地址保存到指针变量中(本例中就是p)。指针变量本身保存了一个地址。被分配的内存块能够存储一个指定类型的数值,而指针正是指向此数值。
下图显示了调用malloc之后的内存状态:
右边的方框表示malloc分配的内存块。
接着程序用if (p==0)检查指针p以确定分配申请成功(此行也可写成if (p==NULL)甚至if (!p))。如果分配失败(p等于零),则程序终止,否则程序将分配的内存块初始化为5,然后打印内存块的值,接着调用free函数将内存块返还给堆,最后退出。
前面的章节有一段代码是将p赋值为一个现成整数i的地址,而本例中的代码和那段代码实际上并无不同。区别只是在于:对于变
|