New动态分配 Delete 释放内存

在C++中,对于变量和对象都是编译器在编译时分配好的,对于数组初始化时,无法确定多少内存,很容意造成大开小用的情况。

new  动态分配

一般格式:1. 指针变量名 =new  类型标识符;

              2.指针变量名  =new  类型标识符(初始值);

              3.指针变量名  =new  类型标识符 [内存单元个数];   开辟数组的定义方法

new运算符返回的是一个指向所分配类型变量的指针。

delete 释放内存

一般格式:1.delete p;

              2.delete []p;

删除变量p的地址空间,释放int内存。 --堆区(优先队列)  delete p实际意思是删除p所指向的目标地址,释放它所占的内存,而非删除p指针。

对于delete 有两大问题: 1.内存泄露  2.重复释放 

int* p=new int;

delete p;

p=NULL;   //上完厕所洗手的好习惯

析构函数

对于线性表的析构函数 

1.  int* p;

while(fisrt!=NULL){

    p=first;

    first=first->next;

    delete p;

}

错误解析:

  int* p=first;

while (p!=NULL){

  delete p;

  p=p->next;

}

已经释放了p所指向的first地址,p->next 到底指向什么了?错误!!!

int a=5;

int* p=a;

cout<<*p<<endl;   p 所指向的地址内容

cout<<&p<<endl;  p本身的地址

cout<<p<<endl;    p所指向的地址 == &a

原文地址:https://www.cnblogs.com/jllj/p/6131120.html