zoukankan      html  css  js  c++  java
  • C++ 指针, New, Delete 与内存分配

    使用new来分配内存:

    int *pn= new int;

    int higgens;

    int *pt=&higgens

    delete 释放内存:

    使用delete时, 要在后面加上指向内存块的指针

    如 delete pt

    注意:

    delete 只能释放使用new 关键字创造出来的指针

    int *pt=5

    delete pt  //错误

    如果new创建的是数组, 如

    int *p = new int[10]

    则在释放时, 代码应为

    delete [] p

    总是, 使用delete和new 时, 应注意一下规则:

    不要使用delete 来释放 不是new 分配的内存

    不要delete 同一块内存两次

    如果使用new [] 则delete时也也应该为delete[]

    数组与指针:

    short tell[20]

    直接对数组名取地址(&tell)时, 数组名被解释为整个数组的地址

    而直接输出tell(cout<<tell) 才是数组第一个元素的地址 = tell[0]

    这个区别体现在:

    当&tell 的结果加1时, 指针移动20个地址

    当tell 加1时, 指针移动2个地址

    动态存储:

    new 和 delete 运算符提供了一种比自动变量和静态变量更灵活的方法, 他们管理了一个内存池, 被称为自由存储空间,(堆) 这样做使得通过new生成的变量, 可以在一个函数重分配空间, 另一个函数中delete释放空间

    数据的生命周期不完全受程序或函数的生存时间控制.

    这种做法使的对内存有更大的控制权, 但是内存管理也更加复杂

    如果new出的内存不delete, 会导致给原变量分配的内存不会自动释放, 但是也不能被继续使用.

    即内存泄漏. 当应用程序的内存被耗尽, 出现内存耗尽错误, 程序崩溃,也会给同时运行在电脑上的其他软件造成伤害.

  • 相关阅读:
    random模块
    collections模块
    re模块
    正则表达式
    递归函数,二分查找
    内置函数,匿名函数
    python 中的爬虫· scrapy框架 重要的组件的介绍
    flask 中的常用组件的使用 ,virtualenv组件和 pipreqs组件 和 偏函数
    Django 中自带的 content_type表 , alipay的接口 需要的配置
    restful 和 restframework
  • 原文地址:https://www.cnblogs.com/derek-dhw/p/10439679.html
Copyright © 2011-2022 走看看