zoukankan      html  css  js  c++  java
  • 空悬指针、野指针、内存泄漏、内存溢出

    在C语言中,指针的功能十分强大,这使得在C中程序员对于指针的使用要十分地谨慎。那么首先我们对于指针的使用就是要对空悬指针(dangling pointer)和野指针进行避免。

      首先我们介绍空悬指针,空悬指针指的是一个指针,当它指向的对象已经被释放的时候而自身却没有被置为null的时候,那么这个指针就会变成一个空悬指针。而野指针,通俗的表示就是没有进行初始化的指针,但是因为一个指针没有初始化的时候会一通乱指,这个时候就类似于空悬指针了,所以有的介绍里面将空悬指针作为野指针的一种来进行描述。实际上我们只需要明确一点:因为我们在动态申请内存并用指针进行指向该块内存,在该内存被free/delete的时候仅仅是释放了这块申请的内存(注意一点释放之后就是告诉系统这块内存可以被其他地方申请到了),但是指针仍然指向这一块内存,那么如果我们后续使用到这个指针,但是这个指针仍然指向的是原来的内存地址,因为在释放之后这块内存地址就可以被其他的地方申请到了,那么在有的时候就会发生灾难性的后果,那么这个时候我们需要的就是无论在初始化的时候还是在最后free/delete的时候都要将指针置为null,对于内置类型这些由编译器进行回收内存的类型在生存期结束之后也要置为null(因为如果指向它的指针的生存期比该数据长的话依旧有概率出错)。虽然说我们在初始化指针的时候也要将指针置为null,但那是在我们声明一个指针却没有为其定义一个指向的对象的时候的做法。实际上当我们为其指明了一个指向的对象的时候就不用了。

      关于指针使用的一些注意事项,这里主要介绍一些关于内存泄漏(memory leak)和内存溢出(out of memory)的:

      举个很简单的例子,内存泄漏指的是程序中有申请内存的过程,但在程序结束之后,始终没有或者无法释放占有的内存的则称为内存泄漏,单次的内存的泄漏可能用户并不会察觉,但是累积的内存泄漏将会十分可怕,无论内存的大小,终会被耗光。也是因为我们在写代码的时候内存泄漏的问题并不严重,因此基本上没有表现出问题,而且现在的操作系统是不可能将全部的计算机内存都分配给IDE的,只会预先划分一块内存给IDE,这时候即使出现内存泄漏情况,也不会到影响整台电脑的情况,所以一般小规模的内存泄漏也不会出现什么大问题,但是作为一名程序员,在语言本身不提供内存回收机制的情况下知道及时释放和回收内存是最基本的知识,所以必须要进行内存的释放。

      知道了内存泄漏,知道内存溢出就变得简单了许多,内存溢出就是可用的内存均被占用,无法申请内存的情况。

  • 相关阅读:
    模板插件aTpl
    KFold交叉验证方式
    XGboost数据比赛实战
    机器学习特征选择方法
    机器学习项目实战
    python二维表格数据的导入与导出
    centos-linux系统如何进入root权限?
    centos7解决yum install mysql-server没有可用包?
    Keras实现简单分类神经网络
    MySQL学习入门总结(非常重要)
  • 原文地址:https://www.cnblogs.com/lixuejian/p/13304409.html
Copyright © 2011-2022 走看看