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运算符来确定动态分配的数组包含的字节数。
    指针和数组名的区别。不能修改数组名的值。但指针是变量,因此可以修该它的值。

  • 相关阅读:
    boost::asio在VS2008下的编译错误
    Java集合框架——接口
    ACM POJ 3981 字符串替换(简单题)
    ACM HDU 1042 N!(高精度计算阶乘)
    OneTwoThree (Uva)
    ACM POJ 3979 分数加减法(水题)
    ACM HDU 4004 The Frog's Games(2011ACM大连赛区第四题)
    Hexadecimal View (2011ACM亚洲大连赛区现场赛D题)
    ACM HDU 4002 Find the maximum(2011年大连赛区网络赛第二题)
    ACM HDU 4001 To Miss Our Children Time (2011ACM大连赛区网络赛)
  • 原文地址:https://www.cnblogs.com/adtxl/p/11491838.html
Copyright © 2011-2022 走看看