使用语句:extern void *malloc(unsigned int num_bytes);
头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。
功能:分配长度为num_bytes字节的内存块
返回值:如果分配成功则返回指向被分配内存的指针(次存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
说明:关于该函数的原型,在旧的版本中malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
名称解释:malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
函数声明:1、语法:void *malloc(size_t size);
2、备注:void*表示未确定类型的指针,void*可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户使用这段空间来存储什么类型的数据(比如是char还是int等)
与new的区别:
在使用上,malloc和new至少有两个不同:new返回指定类型的指针,并且可以自动计算所需大小。比如
1 int*p;
2 p=newint;//返回类型为int*类型(整数型指针),分配大小为sizeof(int);
或:
1 int*parr;
2 parr=newint[100];
3 //返回类型为int*类型(整数型指针),分配大小为sizeof(int)*100;
而malloc则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。
1 int*p;
2 p=(int*)malloc(sizeof(int)*128);
3 //分配128个(可根据实际需要替换该数值)整型存储单元,
4 //并将这128个连续的整型存储单元的首地址存储到指针变量p中
5 double*pd=(double*)malloc(sizeof(double)*12);
6 //分配12个double型存储单元,
7 //并将首地址存储到指针变量pd中
第一、malloc 函数返回的是 void * 类型。对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,建议养成强制转换的习惯。
type*p;
if(NULL==(p=(type*)malloc(sizeof(type))))
/*请使用if来判断,这是有必要的*/
{perror("error...");
exit(1);}
.../*其它代码*/
free(p);
p=NULL;/*请加上这句*/
1 int*p=(int*)malloc(sizeof(int)*100);
2 //分配可以放得下100个整数的内存空间。
char*ptr;
if((ptr(char*)malloc(0))==NULL)
puts("Gotanullpointer");
else
puts("Gotavalidpointer");
此时得到的是Got a valid pointer。把0赋给malloc能得到一个合法的指针。