01 靜態分配內存
- 通常聲明變量都採用“
靜態分配
”的方式,也就是所有變量聲明必須在編譯階段完成。
02 動態分配內存
動態分配內存
是指程序在運行時才提出分配內存的要求,主要目的是讓內存運用更有彈性。- 動態分配內存後必須在程序結束前完成釋放內存的操作。
- 如果程序運行期間分配的內存未釋放,就會造成內存空間的浪費,形成所謂的
內存泄漏
。
動態分配變量
- 在
C++
中,可以分別使用new
和delete
運算符在程序運行期間動態分配與釋放內存空間。 - 其中,
new
運算符會根據所要求的內存大小在內存中分配足夠的空間,並返回所分配內存的指針值,也就是內存地址。
數據類型 *指針變量 = new 數據類型(初值);
- 若不設置初值,可將小括號省略。
- 使用
delete
運算符釋放內存時,該指針變量所指的內存地址必須是原來new
運算符所分配的地址,否則將會造成無法預期的運行結果。
動態分配數組
通常大家將數據聲明爲數組時必須在編譯階段就確定數組的長度,但這樣很容易產生內存的浪費或無法滿足程序所需的問題。別擔心!以上問題可以通過動態分配數組的方式來輕鬆解決。
- 也就是說,使用動態分配數組就可以在程序運行時再臨時決定數組的大小。
- 動態分配數組的方式與動態分配變量的方式類似,聲明後會在內存中自動尋找適合的連續內存空間,其長度必須與指定的數據類型再乘以數組的長度相符。
- 分配完成後,再將該內存區段的起始地址返回給等號左邊所聲明的指針變量(賦值)。
動態分配一維數組的語法如下:
數據類型 *指針數組變量 = new 數據類型[元素個數];
- 分配動態數組時,必須在中括號內指定預分配數組的元素個數。
- 當分配成功時,系統會返回該數組的起始地址,否則返回
NULL
值。 - 當分配的動態數組在程序中不再使用時,也必須用
delete
運算符來釋放。
delete
運算符釋放動態數組的格式如下:
delete [] 指針數組變量;