C语言中的malloc函数用法>?

Python038

C语言中的malloc函数用法>?,第1张

C语言中malloc是动态内存分配函数。

函数原型:void *malloc(unsigned int num_bytes)。

参数:num_bytes 是无符号整型,用于表示分配的字节数。

注意:当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

实现malloc的方法:

首先我们要确定所采用的数据结构。一个简单可行方案是将堆内存空间以块的形式组织起来,每个块由meta区和数据区组成,meta区记录数据块的元信息(数据区大小、空闲标志位、指针等等)。

数据区是真实分配的内存区域,并且数据区的第一个字节地址即为malloc返回的地址 。

malloc使用须要包括头文件:

#include 'stdlib.h'

例如:

int *p

p = new int  /返回类型为int* 类型(整数型指针)。分配大小为 sizeof(int)

或:

int* parr

parr = new int [100]   //返回类型为 int* 类型(整数型指针)。分配大小为 sizeof(int) * 100

而 malloc 则必须由我们计算要字节数,而且在返回后强行转换为实际类型的指针。

int* p

p = (int *) malloc (sizeof(int))

扩展资料:

malloc 函数返回的是 void * 类型。

对于C++,如果你写成:p = malloc (sizeof(int))则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。

所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,养成强制转换的习惯。

在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的;但是在某些系统中是不允许malloc(0)的。

在规范的程序中我们有必要按照这样的格式去使用malloc及free:

type *p

if(NULL == (p = (type*)malloc(sizeof(type))))

/*请使用if来判断,这是有必要的*/

{

perror("error...")

exit(1)

}

.../*其它代码*/

free(p)

p = NULL/*请加上这句*/

malloc是分配动态数组存储空间的函数,引用它必需包含头文件"malloc.h"或"stdlib.h",malloc的作用是分配指定字节个内存空间,并返回该内存空间的首地址,但在赋值前必需进行强制类型转换。至于之后p其实就可以作为普通数组进行使用了,你的程序中少了free(p),要将malloc的空间进行释放。