new开辟时:
1:new开括的是堆区的内存,堆区的内存都是需要程序员手动释放,释放时使用delete,而栈区的内存由系统自己释放,不需要程序员 *** 作。学习的暂时只是用于定义数组。说成“把地址赋给指针”
2:由于new开括的是一块地址,所以需要一个指针来接收这个地址。
3:可以分为是不是数组,不是数组的话有两种方法开辟地址;
int * p1 = new int ;//只定义没有初始化 int * p2 = new int (3);//给 p2初始化了;
定义数组时有一种,定义的数组成为动态数组
int n ; cin >> n ; int * p3 = new int[n];
当然也可以直接
int * p4 = new int[3];
这样只是将数组定义到了堆区,可以说没有必要。(也可能我还不知道)
delete删除时:
1:可以分为是不是数组;
不是数组的话直接
delete p1 ; p1 = NULL ;
是数组时
delete [] p3 ; p3 = NULL ;
释放数组内存时需要在delete的后面加上[],但中括号里面不需要有数组的大小。
在最后都应该指向NULL;不然释放内存后p1就变成了空指针,还会指向内存且有危险。还要谨防重复释放内存,也会有危险,在浅拷贝时会遇到重复释放,应该使用深拷贝,即再开辟一块内存,指针指向另一块内存。
要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)