std::calloc
来自cppreference.com
在标头 <cstdlib> 定义 | ||
void* calloc(std::size_t num, std::size_t size ); | ||
分配 num 个大小为 size 的对象的数组,并初始化所有位为零(在目标区域隐式创建对象)。
若分配成功,则返回指向为任何对象类型适当对齐的,被分配内存块最低(首)字节的指针。
若 size 为零,则行为是实现定义的(可以返回空指针,亦可返回某个不可用于访问存储的非空指针)。
要求下列函数是线程安全的:
对这些分配或解分配特定存储单元的函数调用以单独全序出现,而并且在此顺序中,每个解分配调用先发生于下个分配(如果存在)。 | (C++11 起) |
目录 |
[编辑]参数
num | - | 对象数量 |
size | - | 每个对象的大小 |
[编辑]返回值
成功时,返回指向新分配内存起始的指针。为避免内存泄漏,返回的指针必须以 std::free() 或 std::realloc() 解分配。
失败时,返回空指针。
[编辑]注解
因为对齐要求,分配的字节数不需要等于 num * size。
将所有位初始化为零不保证浮点数或指针各被初始化到 0.0 与空指针值(尽管所有常见平台上都是如此)。
最初(C89 中),添加对零大小的支持是为了接纳下面这种代码
OBJ *p = calloc(0, sizeof(OBJ));// “零长度”占位 ... while(1){ p = realloc(p, c * sizeof(OBJ));// 重分配直至大小稳定 ... // 可能更改 c 或打破循环的代码}
[编辑]示例
运行此代码
#include <cstdlib>#include <iostream> int main(){int* p1 =(int*)std::calloc(4, sizeof(int));// 分配并清零 4 个 int 的数组int* p2 =(int*)std::calloc(1, sizeof(int[4]));// 同上,直接指名数组类型int* p3 =(int*)std::calloc(4, sizeof *p3);// 同上,不重复类型名 if(p2)for(int n =0; n <4;++n)// 打印数组std::cout<<"p2["<< n <<"] == "<< p2[n]<<'\n'; std::free(p1);std::free(p2);std::free(p3);}
输出:
p2[0] == 0 p2[1] == 0 p2[2] == 0 p2[3] == 0
[编辑]参阅
calloc 的 C 文档 |