動態分配記憶體(malloc)和靜態分配記憶體(陣列)生存期
阿新 • • 發佈:2020-10-16
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中元素還在