ANSI-C 中的动态内存管理Dynamic memory in ANSI-C

ANSI-C 中的动态内存管理Dynamic memory in ANSI-C

在C语言中,为了动态分配内存,我们必须求助于函数库stdlib.h。因为该函数库在C++中仍然有效,并且在一些现存的程序仍然使用,所以我们下面将学习一些关于这个函数库中的函数用法。

函数malloc

这是给指针动态分配内存的通用函数。它的原型是:

void * malloc (size_t nbytes);

其中nbytes 是我们想要给指针分配的内存字节数。这个函数返回一个void*类型的指针,因此我们需要用类型转换(type cast)来把它转换成目标指针所需要的数据类型,例如:

char * ronny;
ronny = (char *) malloc (10);

这个例子将一个指向10个字节可用空间的指针赋给ronny。当我们想给一组除char 以外的类型(不是1字节长度的)的数值分配内存的时候,我们需要用元素数乘以每个元素的长度来确定所需内存的大小。幸运的是我们有操作符sizeof,它 可以返回一个具体数据类型的长度。

int * bobby;
bobby = (int *) malloc (5 * sizeof(int));

这一小段代码将一个指向可存储5int型整数的内存块的指针赋给bobby,它的实际长度可能是 24或更多字节数,取决于程序是在什么操作系统下被编译的。

 

函数calloc

calloc malloc 在操作上非常相似,他们主要的区别是在原型上:

void * calloc (size_t nelements, size_t size);

因为它接收2个参数而不是1个。这两个参数相乘被用来计算所需内存块的总长度。通常第一个参数(nelements)是元素的个数,第二个参数 (size) 被用来表示每个元素的长度。例如,我们可以像下面这样用calloc定义bobby

int * bobby;
bobby = (int *) calloc (5, sizeof(int));

malloc calloc的另一点不同在于calloc 会将所有的元素初始化为0

 

函数realloc

它被用来改变已经被分配给一个指针的内存的长度。

void * realloc (void * pointer, size_t size);

参数pointer 用来传递一个已经被分配内存的指针或一个空指针,而参数size 用来指明新的内存长度。这个函数给指针分配size 字节的内存。这个函数可能需要改变内存块的地址以便能够分配足够的内存来满足新的长度要求。在这种情况下,指针当前所指的内存中的数据内容将会被拷贝到新 的地址中,以保证现存数据不会丢失。函数返回新的指针地址。如果新的内存尺寸不能够被满足,函数将会返回一个空指针,但原来参数中的指针pointer 及其内容保持不变。

 

函数 free

这个函数用来释放被前面malloc, calloc realloc所分配的内存块。

void free (void * pointer);

注意:这个函数只能被用来释放由函数malloc, calloc realloc所分配的空间。

你可以参考C++ reference for cstdlib获得更多关于这些函数的信息。

 

转载于:https://www.cnblogs.com/jjxboy/archive/2011/09/21/2184336.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值