#include<iostream>
using namespace std;
int *f(){
int *p = new int;//在堆分配的,只要不delete就相当于“全局的”,只要有地址就能使用
*p = 100;
cout << "p in \'f\' address:" << p << endl;
return p;
}
int g(){
int a = 10;
cout << "a in \'g\' address:" << &a << endl;
return a;
}
int main(){
int a = g();
int *p = f();
cout << *p << " p in \'main\' address:" << p << endl;
cout << a << " a in \'main\' address:" << &a << endl;
delete p;
delete p;//重复delete,编译不报错
cout << "p deleted in \'main\' address:" << p << endl;
cout << *p << endl;//delete 后的p,仍可以使用,但指向的内存中值不确定(反正运行通过)
p = NULL;
cout << "p NULL in \'main\' address:" << p << endl;
//cout << *p << endl;//编译通过但运行出错!地址为0的内存不能访问吧!
return 0;
}
C:\Users\jackz\Desktop\codes\cpp>g++ returnHeap.cpp
C:\Users\jackz\Desktop\codes\cpp>a
a in 'g' address:0x28fedc
p in 'f' address:0x36baa8
100 p in 'main' address:0x36baa8
10 a in 'main' address:0x28ff08
p deleted in 'main' address:0x36baa8
22
p NULL in 'main' address:0