C++ 指針, New, Delete 與內存分配


使用new來分配內存:

int *pn= new int;

int higgens;

int *pt=&higgens

delete 釋放內存:

使用delete時, 要在后面加上指向內存塊的指針

如 delete pt

注意:

delete 只能釋放使用new 關鍵字創造出來的指針

int *pt=5

delete pt  //錯誤

如果new創建的是數組, 如

int *p = new int[10]

則在釋放時, 代碼應為

delete [] p

總是, 使用delete和new 時, 應注意一下規則:

不要使用delete 來釋放 不是new 分配的內存

不要delete 同一塊內存兩次

如果使用new [] 則delete時也也應該為delete[]

 

數組與指針:

short tell[20]

直接對數組名取地址(&tell)時, 數組名被解釋為整個數組的地址

而直接輸出tell(cout<<tell) 才是數組第一個元素的地址 = tell[0]

這個區別體現在:

當&tell 的結果加1時, 指針移動20個地址

當tell 加1時, 指針移動2個地址

 

動態存儲:

new 和 delete 運算符提供了一種比自動變量和靜態變量更靈活的方法, 他們管理了一個內存池, 被稱為自由存儲空間,(堆) 這樣做使得通過new生成的變量, 可以在一個函數重分配空間, 另一個函數中delete釋放空間

數據的生命周期不完全受程序或函數的生存時間控制.

這種做法使的對內存有更大的控制權, 但是內存管理也更加復雜

 

如果new出的內存不delete, 會導致給原變量分配的內存不會自動釋放, 但是也不能被繼續使用.

即內存泄漏. 當應用程序的內存被耗盡, 出現內存耗盡錯誤, 程序崩潰,也會給同時運行在電腦上的其他軟件造成傷害.

 


免責聲明!

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



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