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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM