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 NULLdelete p4;return 0;
} ```
