当前位置:主页 > 软件编程 > C代码 >

C++中malloc与free、new与delete的详解与应用

时间:2021-06-11 08:10:31 | 栏目:C代码 | 点击:

C++面试经常会问到关于malloc/free和new/delete的区别,网上有不同版本的解释,这里总结下并加上个人理解和使用。

两者相同点

两者不同点

注意事项

使用

#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();
}

总结

您可能感兴趣的文章:

相关文章