动态分配内存

时间:2021-12-11 22:06:02

先上段代码,思索其中两个函数的差异:

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; 它已经退化为普通指针了,原地址已经被修改。同时,还存在一个问题,就是动态分配的那块内存,浪费了..........没人管理。


所以,看书-->写代码-->出错-->再看书-->修改代码------->感慨一下。这才是学习的王道!