定义于头文件
<cstdlib>
|
||
void* malloc( std::size_t size );
|
||
分配 size
字节的未初始化存储。
若分配成功,则返回指向分配的适合对任何标量类型对齐的内存块中,最低(首)字节的指针。
若 size
为零,则行为是实现定义的(可以返回空指针,或某个不可用于访问存储,但必须传递给 std::free 的非空指针)。
要求下列函数是线程安全的:
对这些分配或解分配特定存储单元的函数调用以单独全序出现,并且在此顺序中,每个解分配调用先发生于下个分配(若存在)。 |
(C++11 起) |
目录 |
size | - | 要分配的字节数 |
成功时,返回指向新分配内存起始的指针。返回的指针必须用 std::free() 或 std::realloc()
解分配。
失败时,返回空指针。
任何情况下,此函数不调用构造函数或初始化内存。无能保证调用匹配的解分配函数的预备使用的智能指针。 C++ 中偏好的内存分配方法是用 RAII 预备函数 std::make_unique 、 std::make_shared 、容器构造函数等,而在低层代码中为 new 表达式。
#include <iostream> #include <cstdlib> int main() { int* p1 = (int*)std::malloc(4*sizeof(int)); // 为 4 个 int 的数组分配足够空间 int* p2 = (int*)std::malloc(sizeof(int[4])); // 同上,直接命名 int* p3 = (int*)std::malloc(4*sizeof *p3); // 同上,无需重复类型名 if(p1) { for(int n=0; n<4; ++n) // 填充数组 p1[n] = n*n; for(int n=0; n<4; ++n) // 返回print it back out std::cout << "p1[" << n << "] == " << p1[n] << '\n'; } std::free(p1); std::free(p2); std::free(p3); }
输出:
p1[0] == 0 p1[1] == 1 p1[2] == 4 p1[3] == 9
分配函数 (函数) |
|
(C++17 中弃用)
|
获得未初始化存储 (函数模板) |
malloc的 C 文档
|