内存分配函数malloc 与 calloc的用法及区别

来源:互联网 发布:linux下关闭tomcat 编辑:程序博客网 时间:2024/05/16 11:29

在C语言的动态分配内存过程中,我们经常使用到函数 malloc 与 calloc。 这两个函数均包含在“malloc.h"中,对其用法我们有一个比较深刻的理解。

函数malloc的原型为:void *malloc( unsigned int num_bytes)  。分配长度为num_bytes个字节的内存块,返回值为无类型指针,该指针指向所分配内存块的起始位置,因此利用该无类型指针赋值给其他类型的指针的时候,需要进行强制类型转换。如下图:


当内存分配失败时,返回空指针NULL。在使用malloc 分配内存之后,进行NULL判断是一个良好的编程习惯。


函数calloc的原型为: void *calloc( unsigned int num, unsigned int size)。 作用为:在内存的动态存储区分配num个长度为size的存储块,返回指向该存储块起始地址的无类型指针,若返回失败,返回NULL。因此,同样需要对该函数返回值进行判断。 分配长度为100个int长度的内存块。


calloc 与malloc的一个相同点在于使用之后均需要free(指针),释放内存块。

不同点在于calloc分配内存之后,会自动将这一块的内存之初始化为0.而malloc则不会,分配内存的值为一些垃圾数值。因此,在使用malloc函数之后,我们一般要调用函数memset对内存进行初始化。

memset的函数原型为: void *memset(void *s, int ch, unsigned int size)  作用是:将s所指向的内存块的前size个字节全部设置为ch对应的ASCii值。 它是对较大数组或者结构体清零操作的最快方式。



0 0