malloc函数头文件
#include <stdlib.h>
或者
#include <malloc.h>
malloc函数定义
extern
void
*
malloc
(unsigned
int
num_bytes);
malloc函数使用
| 第一、malloc 函数返回的是 void * 类型。 对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。 所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,建议养成强制转换的习惯。 第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。 在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的;但是在某些系统中是不允许malloc(0)的。
|
| 在规范的程序中我们有必要按照这样的格式去使用malloc及free:确保空间成功
|
与new的区别
int
*p;
p =
new
int
;
//返回类型为int *类型(整数型指针),分配大小为sizeof(int);
或
int
*parr;
parr =
new
int
[100];
//返回类型为int *类型(整数型指针),分配大小为sizeof(int) * 100;
注意事项
A、申请了内存空间后,必须检查是否分配成功。
B、当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,防止程序后面不小心使用了它。
C、这两个函数应该是配对。如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。释放只能一次,如果释放两次及两次以上会出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。
D、虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一些编译器的检查。