zoukankan      html  css  js  c++  java
  • C++中的delete加深认识

    delete操作:

    我们在删除一个指针之后,编译器只会释放该指针所指向的内存空间,而不会删除这个指针本身

    1.假如你不去释放,那么该区域的内存始终不能被其他数据所使用。
    2.指向该内存的指针是个局部变量,当定义给指针的函数结束并返回时,指针也就消失了,那么就再也找不到该块的内存区域。
    假如指向该内存区域的指针自动消失了,计算机就再也找不到该区域的内存了,就好像丢了这块内存一样,这
    种情况称为“内存泄漏”。
    这种情况直到程序结束该区域的内存才能恢复使用。

    内存泄漏:(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

    野指针:指向被释放的或者访问受限内存的指针。(感觉就是不正常的指针)

    造成野指针的原因:

    1. 指针变量没有被初始化,因为会分配一个随机的值.若它指向非法地址,这时的操作会报异常;若它指向一个合法地址,更危险,因为这样可能更改一个正在使用的数值(声明后需要指向一个变量或者指向堆里的内存
    2. 指针被free或者delete后,没有置为NULL, freedelete只是把指针所指向的内存给释放掉,并没有把指针本身干掉,此时指针指向的是“垃圾”内存。释放后的指针应该被置为NULL.
    3. 指针操作超越了变量的作用范围,比如返回指向内存的指针就是野指针。
    与空指针不同,野指针无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。需对指针进行初始化。

    C++ 使用delete删除指针的例子:

    https://blog.csdn.net/u011301123/article/details/9293297

    编译器默认将释放掉的内存空间回收然后分配给新开辟的空间

     
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    hdu1507
    zoj1654
    hdu2444
    poj3692
    hdu1150
    hdu1151
    poj2771
    hdu3829
    hdu4619
    hdu4715
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/11605348.html
Copyright © 2011-2022 走看看