malloc()与free()
l 函数原型
malloc函数的函数原型为:void* malloc(unsigned int size),它根据参数指定的尺寸来分配内存块,并且返回一个void型指针,指向新分配的内存块的初始位置。如果内存分配失败(内存不足),则函数返回NULL。
l 关于返回值
malloc的返回值为void*。我们在使用的时候,习惯对返回值进行强制类型转换:
char * p = NULL;
p = (char *)malloc(sizeof(char));
ANSI C以前的C,因为没有void*这种类型,malloc函数的返回值被简单地定义为char*,char*是不能被赋予指向其他类型变量的指针的。所以在使用malloc函数时通常需要对其返回值进行强制类型转换。
在ANSI C中,malloc函数的返回值为void*。void*类型是可以直接赋值给其他任何类型的指针。所以,上面的强制类型转换操作现在已经不需要了。
然而在c++中,任何类型的指针都可以赋给void*,而void*却不可以赋给其他类型的指针,所以在c++中使用malloc函数的时候,强制类型转换是必须的。另一方面,在c++中应该使用new来分配内存。
l malloc在堆上分配内存
malloc函数分配的内存是在堆(heap)上的。操作系统有