C++的动态内存管理
1. 在堆区申请内存 new
- 变量
int *p = new int;
int *p = new int(888); //分配并对分配的内存初始化
数组
int *p = new int[3];
int *p = new int[3]{1, 2, 3}; //使用初值列表初始化,C++11支持
2. 在堆区释放内存 delete
变量
delete p; //p为int * 类型,保存分配的内存的首地址
- 数组
delete [] p;
注意!
-
4. 示例
```cpp
include
include
using namespace std;
int main(int argc, char const argv[]) { cout << “——————c风格内存管理” << endl; int p1 = (int )malloc(4); int p2 = (int *)malloc(12);
*p1 = 666;
for(int i = 0; i < 3; i++){
*(p2 + i) = i + 1;
}
cout << *p1 << endl;
for(int i = 0; i < 3; i++){
cout << *(p2 + i) << endl;
}
*p1 = 777;
for(int i = 0; i < 3; i++){
*(p2 + i) = i + 1 + 10 * (i + 1);
}
cout << *p1 << endl;
for(int i = 0; i < 3; i++){
cout << *(p2 + i) << endl;
}
free(p1);
free(p2);
cout << "------------c++风格内存管理" << endl;
int *p11 = new int(666);
int *p12 = new int[3]{1, 2, 3};
cout << *p11 << endl;
for(int i = 0; i < 3; i++){
cout << *(p12 + i) << endl;
}
*p11 = 777;
for(int i = 0; i < 3; i++){
*(p12 + i) = i + 1 + 10 * (i + 1);
}
cout << *p11 << endl;
for(int i = 0; i < 3; i++){
cout << *(p12 + i) << endl;
}
delete p11; // 不要重复释放同一块内存
p11 = NULL;
delete[] p12;
p12 = NULL;
int a = 88;
int *p3 = &a;
//delete p3; // 不要delete栈区内存
int *p4 = NULL; // 可以delete NULL
delete p4;
return 0;
} ```