malloc 和 free 是 C 语言 stdlib 标准库中的函数 , 用于 分配 和 回收 堆内存 ;
new 和 delete 是 C++ 语言中的 操作符 , 用于 分配 和 回收 堆内存 ;
在 C++ 语言中 , 兼容 C 语言 的 malloc 和 free 用法 , 但是推荐使用 new 和 delete 进行动态内存管理 ;
一般情况下 :
那么 使用 malloc 申请的内存 , 是否能使用 delete 进行释放 ,
使用 new 申请的内存 , 是否能使用 free 进行释放 ,
下面分为不同类型的数据申请内存的几种情况进行讨论 :
使用 malloc 函数 为 基础类型 分配的内存 , 可以使用 delete 进行释放 ;
在下面的代码中 ,
使用 malloc 函数 在 堆内存中 , 申请一个 int 类型的内存空间 ,
int* p = (int*)malloc(sizeof(int));
然后使用 delete 释放内存空间 , 该程序正常执行 , 没有报错 , 说明对于 使用 malloc 函数 为 基础类型 申请的 堆内存空间 , 使用 delete 操作符 可以完成 free 函数的职能 , 成功释放内存空间 ;
// malloc 申请的内存 使用 delete 释放
delete(p);
代码示例 :
#include "iostream"
using namespace std;
int main()
{
// C 语言中动态申请内存
int* p = (int*)malloc(sizeof(int));
*p = 10;
cout << "*p = " << *p << endl;
// malloc 申请的内存 使用 delete 释放
delete(p);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
*p = 10
Press any key to continue . . .
使用 new 操作符 为 基础类型 分配的内存 , 可以使用 free 进行释放 ;
在下面的代码中 ,
使用 malloc 函数 在 堆内存中 , 申请一个 int 类型的内存空间 ,
int* p = (int*)malloc(sizeof(int));
然后使用 delete 释放内存空间 , 该程序正常执行 , 没有报错 , 说明对于 使用 malloc 函数 为 基础类型 申请的 堆内存空间 , 使用 delete 操作符 可以完成 free 函数的职能 , 成功释放内存空间 ;
// malloc 申请的内存 使用 delete 释放
delete(p);
代码示例 :
#include "iostream"
using namespace std;
int main()
{
// 使用 new 为基础类型在堆内存中申请内存空间
int* p = new int;
*p = 10;
cout << "*p = " << *p << endl;
// new 申请的内存 使用 free 释放
free(p);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
*p = 10
Press any key to continue . . .