首先,咱們能夠把程序所佔的內存空間分爲三個部分:(能夠根據靜態資源區、棧區、堆區來劃分)安全
靜態存儲:程序運行期間由系統分配固定獲得存儲空間(棧);函數
動態存儲:開發者根據自身須要進行動態分配的存儲空間(堆)。spa
靜態儲存典型的就是咱們函數內部的形參、局部變量,在函數獲得生命週期結束以後,這些變量所佔的內存也會被釋放掉。指針
eg:code
int* StackMemory() { int stackmemory; int* stackptr = nullptr; stackptr = &stackmemory; printf("ptr1=%d", stackptr); return stackptr; }
StackMemory函數的調用結束後,StackMemory所佔的內存也會相應的釋放。blog
若是咱們此時使用StackMemory返回給咱們的指針所指的地址是不安全的。生命週期
void main() { int* stackprt; stackprt = StackMemory(); *stackprt = 100; printf("ptr2=%d", stackprt); }
想要StackMemory返回的地址是安全的,這裏就要用到動態分配存儲空間,用一個新函數Dynamic。內存
int* Dynamic() { //(int*)malloc(4);也能夠 int* dy = new int(10); printf("ptr1=%d", dy); return dy; }
用new、malloc均可以建立動態存儲。如今咱們調用Dynamic返回的地址就是安全的了。資源
void main() { int* stackprt; stackprt = Dynamic(); *stackprt = 100; printf("ptr2=%d", stackprt); free(stackprt); }
注意:動態分配的存儲須要咱們手動來釋放,否則會形成內存的泄露,釋放內存調用free(它跟malloc都在malloc.h裏)方法。開發