1. 程式人生 > 實用技巧 >動態分配記憶體(malloc)和靜態分配記憶體(陣列)生存期

動態分配記憶體(malloc)和靜態分配記憶體(陣列)生存期

 1 int* f1()
 2 {
 3     int a[3] = { 1,2,3 }; //在棧中靜態分配的記憶體,f1函式程式碼塊執行完後這塊記憶體空間會自動釋放,就找不到
 4                //這樣一個數組a了,a中的元素也不可知            
 5     return a;            
 6 }
 7 int* f2()
 8 {
 9     int* b = (int*)malloc(sizeof(int) * 3);//在堆中動態分配,f2程式碼塊執行完後這塊記憶體裡存的東西不會釋放
10     b[0] = 4, b[1] = 5, b[2] = 6
;      //b中元素4,5,6還存著。如果要釋放這塊記憶體需要手動free(),或程式結束後自動釋放 11 return b; 12 } 13 14 int main() 15 { 16 int* p1 = f1();          //返回a陣列的地址並列印其中元素 17 int* p2 = f2();          //返回b陣列 18 for (int i = 0; i < 3; i++) 19 cout << p1[i] << endl;     20 cout << "--------------
" << endl; 21 for (int i = 0; i < 3; i++) 22 cout << p2[i] << endl; 23 }

上面是a中元素,記憶體早已被釋放,裡面的東西也改變了。下面的b中元素還在