跳到主要内容

C++ malloc() 函数

C++ 中的 malloc() 函数用于为指针分配一块未初始化的内存。它定义在 cstdlib 头文件中。

示例

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {

// 为 int 指针分配 int 大小的内存
int* ptr = (int*) malloc(sizeof(int));

// 将值 5 赋给分配的内存
*ptr = 5;

cout << *ptr;

return 0;
}

// 输出:5

malloc() 语法

malloc() 的语法是:

malloc(size_t size);

这里,size 是我们希望分配的内存大小(以字节为单位)。

malloc() 参数

malloc() 函数接受以下参数:

  • size - 一个无符号整数值(转换为 size_t),代表以字节为单位的内存块

malloc() 返回值

malloc() 函数返回:

  • 指向由函数分配的未初始化内存块的 void 指针
  • 空指针,如果分配失败

注意: 如果 size 为零,返回的值取决于库的实现。它可能是也可能不是 空指针

malloc() 原型

cstdlib 头文件中定义的 malloc() 原型是:

void* malloc(size_t size);

由于返回类型是 void*,我们可以将其类型转换为大多数其他原始类型,而不会出现问题。

示例 1:C++ malloc()

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {

// 分配 5 个 int 内存块
int* ptr = (int*) malloc(5 * sizeof(int));

// 检查是否成功分配内存
if (!ptr) {
cout << "内存分配失败";
exit(1);
}

cout << "初始化值..." << endl << endl;

for (int i = 0; i < 5; i++) {
ptr[i] = i * 2 + 1;
}
cout << "初始化的值" << endl;

// 打印分配内存中的值
for (int i = 0; i < 5; i++) {

// ptr[i] 和 *(ptr+i) 可互换使用
cout << *(ptr + i) << endl;
}

// 释放内存
free(ptr);

return 0;
}

输出

初始化值...

初始化的值
1
3
5
7
9

这里,我们使用 malloc()ptr 指针分配了 5 个 int 内存块。因此,ptr 现在充当一个数组。

int* ptr = (int*) malloc(5 * sizeof(int));

注意,我们将 malloc() 返回的 void 指针转换为了 int*

然后,我们使用 if 语句检查分配是否成功。如果不成功,我们退出程序。

if (!ptr) {
cout << "内存分配失败";
exit(1);
}

接着,我们使用 for 循环初始化分配的内存块,并使用另一个 for 循环打印这些值。

最后,我们使用 free() 函数释放内存。

free(ptr);

示例 2:C++ malloc() 分配零大小

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {

// 分配大小为 0 的内存
int *ptr = (int*) malloc(0);

if (ptr == NULL) {
cout << "空指针";
}
else {
cout << "地址 = " << ptr;
}

// 释放内存
free(ptr);

return 0;
}

输出

地址 = 0x371530

这里,我们使用 malloc() 为 `ptr

指针分配了大小为 **0** 的int` 内存。

int* ptr = (int*) malloc(0);

使用 if 语句,我们检查 malloc() 是返回了空指针还是返回了一个地址。

最后,我们使用 free() 释放内存。