温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

malloc与free怎么在C++中使用

发布时间:2021-06-17 14:31:35 来源:亿速云 阅读:193 作者:Leah 栏目:编程语言

malloc与free怎么在C++中使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

两者相同点

  • 1.都可以申请动态堆内存。

两者不同点

  • 1.new/delete是C++的操作符,malloc/free是C/C++的标准库函数。

  • 2.new申请的可以理解为对象,new时会调用构造函数,返回指向该对象的指针,delete时调用析构函数;malloc申请的只是内存,不是对象。

  • 3.new/delete是保留字,不需要头文件支持;malloc/free需要头文件库函数支持。

注意事项

  • 1.用new申请的内存,必须用delete释放。

  • 2.用new[]申请的内存,必须用delete[]释放。

  • 3.delete释放内存后,指针值不变,良好的风格是释放后指针置为NULL,如,delete p; p = NULL。

  • 4.用malloc申请的内存,必须用free释放。

使用

#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"
#include <string.h>
struct Stu
{
 char name[32];
 int age;
};
int main()
{
/**************************** 基本用法 **********************************/
 //申请一个int类型
 int *p1 = new int; //直接申请赋值 int* p1 = new int(3);
 int *p2 = (int*)malloc(sizeof(int));
 //申请一个char类型
 char *p3 = new char; //直接申请赋值 char *p3 = new char('c');
 char *p4 = (char*)malloc(sizeof(char));
 //申请一个int型一维数组
 int *p5 = new int[5]; //直接申请赋值 int *p5 = new int[5]{1,2,3,4,5};
 int *p6 = (int*)malloc(sizeof(int)*5);
 //申请一个char型一维数组
 char* p7 = new char[6]; //直接申请赋值 char* p7 = new char[3]{'a', 'v', 'c'};
 char* p8 = (char*)malloc(sizeof(char)*6);
 //申请一个int型二维数组
 int(*p9)[2] = new int[2][2]; //直接申请赋值 int(*p9)[2] = new int[2][2]{ 1,2,3,4 };
 int(*p10)[2] = (int(*)[2])malloc(sizeof(int)*2*2);
 //申请一个char型二维数组
 char(*p11)[2] = new char[2][2];
 char(*p12)[2] = (char(*)[2])malloc(sizeof(char)*2*2);
/***************************** 申请二级指针内存 **********************************/
 //申请二级指针(new,delete)
 char** p13 = new char*[2];
 p13[0] = "aaaaaaaaaa";
 p13[1] = "vvvvvvvvvv";
 delete p13;
 //申请二级指针(malloc, free)
 char** p14 = (char**)malloc(sizeof(char*)*2);
 p14[0] = "cccccccc";
 p14[1] = "dddddddd";
 delete p14;
/****************************** 申请结构体内存 *********************************/
 //new delete
 Stu* pStu1 = new Stu;
 Stu* pStu2 = new Stu{"wpf", 10};
 Stu* pStu3 = new Stu[1024];
 delete pStu1;
 delete pStu2;
 delete[] pStu3;
 //malloc free
 Stu* pStu4 = (Stu*)malloc(sizeof(Stu));
 memset(pStu4, 0, sizeof(Stu));
 free(pStu4);
 getchar();
}

看完上述内容,你们掌握malloc与free怎么在C++中使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI