zoukankan      html  css  js  c++  java
  • 动态分配内存

    动态分配内存

    整理自《C++ Primer Plus》

    1. 指针和自由存储空间

    • 变量的本质是一段连续内存空间的别名。使用引用可以有多个别名。
    • *运算符被称为间接值或解除引用运算符,将其应用于指针,可以得到该地址处存储的值。
    • 在32位系统下,指针占4个字节,64位系统下指针占8个字节
    • 指针的危险。 在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据内存。
        long *fellow;	// create a pointer to long
        *fellpw = 23333;	// place a value in never-never land
    

    警告: 一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。

    • 使用new来分配内存。
      变量是在编译时分配的有名称的内存,而指针只是为可以通过名称直接访问的内存提供一个别名。指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。在C语言中,可以用库函数malloc()来分配内存;在C++中仍然可以这样做,但C++还有更好的方法——new运算符。
      new int 告诉程序,需要适合存储int的内存。new运算符根据类型来确定需要多少字节的内存。然后它找到这样的内存,并返回其地址。

    • **使用delete释放内存 **
      使用delete时,后面要加上指向内存块的指针,这将释放ps指向的内存,但不会删除指针ps本身。一定要配对地使用new和delete;否则将发生内存泄漏,也就是说,被分配的内存再也无法使用。如果内存泄漏严重,则程序将由于不断寻找更多内存而终止。
      不要尝试释放已经释放的内存块

    int *ps = new int;	// ok
    delete ps;	// ok
    delete ps;	// not ok now
    int jugs = 5;	// ok
    int *pi = &jugs;	// ok
    delete pi;	// not allowed, memory not allocated by new
    

    警告: 只能用delete来释放使用new分配的内存。然而,对空指针使用delete是安全的。
    使用静态联编时,必须在编写程序时指定数组的长度;使用动态联编时,程序在运行时确定数组的长度。
    不能使用sizeof运算符来确定动态分配的数组包含的字节数。
    指针和数组名的区别。不能修改数组名的值。但指针是变量,因此可以修该它的值。

  • 相关阅读:
    真正的Java学习从入门到精通
    Java学习从入门到精通(1) [转载]
    Java Learning Path(三)过程篇
    Java Learning Path(五)资源篇
    Java Learning Path(四) 方法篇
    浅析Java语言中两种异常的差别
    JDK,JRE,JVM区别与联系
    JAVA敏捷开发环境搭建
    谈谈WEB开发中的苦大难字符集问题
    java读取clob字段的几种方法
  • 原文地址:https://www.cnblogs.com/adtxl/p/11491838.html
Copyright © 2011-2022 走看看