动态分配内存

动态分配内存

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

转载于:https://www.cnblogs.com/adtxl/p/11491838.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值