zoukankan      html  css  js  c++  java
  • 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继续使用修改它,结果是系统会在此销毁它。在某些场合下,该程序也许会引起内存报错,甚至会造成多个程序崩溃。所以对于栈内存的指针一定要明白其何时被销毁,不在重复利用它。

  • 相关阅读:
    20180925-6 四则运算试题生成
    20180925-7 规格说明书-吉林市2日游
    20180925-5 代码规范,结对要求
    20180925-2 功能测试
    20180918-2 每周例行报告
    互评Alpha版本
    2017软工 — 每周PSP
    王者荣耀交流协会 — Alpha阶段中间产物
    王者荣耀交流协会第四次Scrum立会
    2017秋软工 —— 本周PSP
  • 原文地址:https://www.cnblogs.com/lovemi93/p/7526353.html
Copyright © 2011-2022 走看看