C++动态分配内存
C++动态分配内存
分配内存这个事上,在做项目的时候确实很重要,不是不会用,就怕忘记操作,就会造成一些bug,这东西还是得多写代码才行;
程序中一般会把内存分到两部分里面,一个是堆,可用于分配动态内存,不会自动释放的;另一个是栈,函数内部申明变量都将占用栈内存。
分配方法
new和delete
//用法
int *a = new int;
int *arr = new int[len]
检测是否分配成功
int *p = NULL;//内存地址初始化
if(!(int *p=new int)){
cout<<"error";
exit(1);
}
释放内存
delete a;
delete []arr;
arr = NULL;//内存块释放后最好指向NULL,避免变为嘢指针;
二维数组动态分配
int **arr;//x*y
arr = new int *[x];
for(int i=0;i<x;i++){
arr[i]=new int arr[y];
}
//delete
for(int i=0;i<x;i++){
delete []arr[i];
}
delete []arr;
arr = NULL;
对象的二维动态分配
直接就是delete调用析构函数
malloc 与free
int *p = (int*)malloc(sizeof(int)*len);
for(int i=0;i<len;i++) cin>>*p;
free(p);
总结
- malloc和free是标准库函数;new和delete是C++关键字;
- malloc和free需要手动计算大小,返回值为void*,;new和delete自动计算类型大小,返回值为对应类型指针;
- malloc和free对类使用只会开辟空间,不会对类进行初始化,free也不会调用析构函数;new和delete自动开辟内存和创建对象,delete自动调用析构函数。