void *malloc(size_t nbytes);
void *realloc(void *aptr, size_t nbytes);
void *_malloc_r(void *reent, size_t nbytes);
void *_realloc_r(void *reent, void *aptr, size_t nbytes);
void _free_r(void *reent, void *aptr);
使用 malloc 请求分配一个至少具有 nbytes 字节可用存储空间的对象。如果空间可用,malloc 将返回一个指向新分配块的指针作为其结果。
如果您已经有一个由 malloc 分配的存储块,但不再需要为其分配的所有空间,可以通过调用 realloc 并将对象指针和新的所需大小作为参数来缩小它。realloc 保证较小对象的内容与原始对象的开头相匹配。
类似地,如果对象需要更多空间,请使用 realloc 请求更大的大小;同样,realloc 保证新的更大对象的开头与原始对象的内容相匹配。
当您不再需要最初由 malloc 或 realloc(或相关函数 calloc)分配的对象时,可以通过调用 free 并将该对象的地址作为参数,将其返回到内存存储池中。您也可以通过将 0 作为 nbytes 参数调用 realloc 来实现此目的。
替代函数 _malloc_r、_realloc_r 和 _free_r 是可重入版本。额外的参数 reent 是一个指向可重入结构的指针。### 返回值
malloc 如果成功,则返回一个指向新分配空间的指针;否则返回 NULL。如果您的应用程序需要生成空对象,可以为此目的使用 malloc(0)。
realloc 返回一个指向新内存块的指针,如果无法分配新块,则返回 NULL。当您使用 `realloc(aptr,0)'(其效果与 `free(aptr)' 相同)时,结果也为 NULL。您应始终检查 realloc 的结果;即使您请求的是较小的对象,也不能保证重新分配成功。
**权威来源**: BUSMASTER DITA help source `malloc.dita`, compiled into `BUSMASTER.CHM` with the application.