C++中的动态内存分配(分配堆空间)
-
- [1. C语言与C++动态内存分配](#1. C语言与C++动态内存分配)
- [2. 使用](#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(999 sizeof(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释放
示例代码:
cpp
#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=10
struct 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]=11
strcpy(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;
}