New动态分配 Delete 释放内存

Posted 勤学鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于New动态分配 Delete 释放内存的主要内容,如果未能解决你的问题,请参考以下文章

c++中new和delete的用法

part03-动态内存分配

part03-动态内存分配

part03-动态内存分配

指针和动态内存分配和释放

C++ new和delete运算符简介