你好

动态分配内存(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中元素还在

posted @ 2020-10-16 12:08  S_nA_tCH!  阅读(503)  评论(0)    收藏  举报