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

浙公网安备 33010602011771号