C++入门经典-例5.13-内存安全,被销毁的内存

1:当指针所指向的内存被销毁时,该区域不可复用。若有指针指向该区域,则需要将该指针置为空值(NULL)或者指向未被销毁的内存。

    内存销毁实质上是系统判定该内存不是变成人员正常使用的空间,系统也回将它们分配给别的任务。若擅自使用被销毁内存的指针更改该内存的数据,很可能会造成意向不到的后果。

代码实例如下:

// 5.13.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
int* sum(int a, int b)
{
    int* pS = NULL;
    int c = a + b;
    pS = &c;
    return pS;
}
int main()
{
    int* pI = NULL;  //将指针初始化为空
    int k1 = 3;
    int k2 = 5;
    pI = sum(k1, k2);
    cout << "*pI的值:" << *pI << endl;
    cout << "也许*pI还保留着i值,但它已经被程序认定为销毁" << endl;
    cout << "*pI的值:" << *pI << endl;
    cout << "尝试修改*pI" << endl;
    *pI = 3;
    for (int i = 0; i<3; i++)
    {
        cout << "修改被销毁的内存后*pI的值:" << *pI << endl;
    }
}
View Code

运行结果:

2:从上面的程序可以看出,指针pI从sum函数中得到一个临时指针,该指针是指针pS的临时复制品,操作完成后就消失,而它所保留的地址交给了pI。在sum执行完毕后,该域使用的栈内存会被系统销毁或挪用。本程序尝试使用pI继续使用修改它,结果是系统会在此销毁它。在某些场合下,该程序也许会引起内存报错,甚至会造成多个程序崩溃。所以对于栈内存的指针一定要明白其何时被销毁,不在重复利用它。

原文地址:https://www.cnblogs.com/lovemi93/p/7526353.html