先上段代码,思索其中两个函数的差异:
int* fun1()
{
int* point = new int();
//int p = 5;
//point = &p;
return point;
}
int* fun2()
{
int * point = new int();
int p = 5;
point = &p;
return point;
}
int _tmain(int argc, _TCHAR* argv[])
{
int* p = fun1();
cout << *p << endl;
delete p;
int* pp = fun2();
cout << *pp << endl;
delete pp;
getchar();
return 0;
}
首先,第一个函数返回值,是一个动态分配的内存空间指针,所以,在调用delete时,是可以正常运行的。机制与new与delete一样,是动态存储管理。
第二个函数返回值,第一眼看过去,好像也是动态分配的内存空间指针。但在调用delete时,会报错。为什么?
仔细分析,原来问题出在这里: point = &p; 它已经退化为普通指针了,原地址已经被修改。同时,还存在一个问题,就是动态分配的那块内存,浪费了..........没人管理。
所以,看书-->写代码-->出错-->再看书-->修改代码------->感慨一下。这才是学习的王道!