对比AnsiC中三个用于存储器动态分配的函数
1、malloc:分配指定字节的存储区,存储区初始值不确定
#include <stdlib.h>
void *malloc(size_t size);
成功返回非空指针,失败返回空指针
2、calloc:为指定长度的对象,分配能够容纳其指定个数的存储空间,空间每一位都初始化为0.如下代码是分配nobj个大小为size的内存
#include <stdlib.h>
void *calloc(size_t nobj,size_t size);
成功返回非空指针,失败返回空指针
3 realloc:更改以前分配区的长度(可以增加或者减少),当增加长度的时候,可能会将以前分配的内容移动到另一个更大的区域,新增加的区域初始值不确定
#include <stdlib.h>
void *realloc(void *ptr,size_t newsize);
成功返回非空指针,失败返回空指针
若ptr是一个空指针,则realloc功能和malloc相同,用于分配指定长度newsize的存储区
4 alloca:调用时与malloc相同,但它是在当前函数的栈上分配存储空间,而不是在堆上。alloca的特点是当函数返回时,自动释放函数使用的帧栈,不用为释放空间而操心,但该函数的缺点是不适合于系统之间的移植
#include <stdlib.h>
void *allcoa(size_t size);
成功返回非空指针,失败返回空指针