C++中的动态内存分配(分配堆空间)
- 1. C语言与C++动态内存分配
- 2. 使用
- 3.malloc和new有什么区别
- 示例代码:
1. C语言与C++动态内存分配
-
C语言
malloc calloc realloc free 函数
-
C++
new关键字分配堆空间
delete关键字释放堆空间
2. 使用
-
第一种:分配一个int大小的堆空间
int *p=malloc(sizeof(int));
int *p=new int; delete p; -
第二种:分配一个int大小的堆空间,并赋值
int *p=malloc(sizeof(int));
*p=999;
int *p=new int(999); delete p; -
第三种:分配多个int大小的堆空间
int p=malloc(999sizeof(int));
int *p=new int[999]; delete []p;
p[1]=55;
*(p+1)=99; -
注意:
第一个: new int(999)和new int[999]的区别
第二个: delete只要new分配堆空间的时候使用了[],那么delete对应写上[]
3.malloc和new有什么区别
- 区别1:malloc是个库函数,new是关键字
- 区别2:free释放,delete释放
示例代码:
#include <iostream> //C++的标准输入输出流头文件
#include <cstring> //#include <string.h>
using namespace std; //我要使用命名空间std
/*new申请堆空间公式:new 数据类型delete释放堆空间
*/struct student
{char name[10];int age;
};int main()
{//申请一个int大小的堆空间int *p=new int; //int *p=malloc(sizeof(int))//申请多个int大小的堆空间int *p1=new int[10]; //int *p1=malloc(10*sizeof(int))//申请一个int大小的堆空间,给它赋初始值//()表示赋值,[]表示申请多少个类型的堆空间int *p2=new int(10); //int *p2=malloc(sizeof(int)) *p2=10struct student *p3=new struct student;struct student *p4=new struct student[8];//使用堆空间--》C语言的知识*p=456;*p1=10; //p1[0]=10*(p1+1)=11; //p1[1]=11strcpy(p3->name,"张三");p3->age=18;cout<<"*p is: "<<*p<<endl;cout<<"*p2 is: "<<*p2<<endl;//释放堆空间//如果申请的时候用到了[],释放的时候就必须用[]delete p;delete []p1;delete p2;delete p3;delete []p4;return 0;
}