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()
释放内存。