内存泄露

news/2024/11/9 18:28:32

  内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。

应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存

块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。所以malloc后一定要free,new了之后一定要delete,creatDC之后一定要deleteDC的。

 

内存泄漏可以分为4类:1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。

  2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
 
  3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
 
  4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

例子:

void   f1(void)   

  {   
        int   *   p;     
        p   =   new   int;   
  }   
    
  执行了F1函数后,p所分配到的内存地址就丢了。找不回那个int内存了,所以这里的内存泄露了!一般多是指内存分配未回收。

.用   malloc   分配了,但没有用   free   释放。   

  2.用   new   分配了,但没有用   delete   删除。   
  3.用   GlobalAlloc   分配,但没有用   GlobalFree   释放。   
  4.用   new   []   分配的数组,没有用   delete[]   删除,而是用   delete   删除。   
  如:   
      struct   A   {   
            int   num;   
      }   
    
      struct   A*   pa;   
      pa   =   new   A[10];   
      delete   pa;   //应该用delete[]   pa;


http://www.niftyadmin.cn/n/3390884.html

相关文章

VMware怎么全屏

ctrl + alt + Enter 切换是否全屏 ctrl + alt + esc 切换鼠标

Intel 集成显卡的Linux驱动安装

Intel 集成显卡的Linux驱动安装    目前使用Intel 集成显卡的计算机主要集中在中低端商务台式机和中低端笔记本电脑。这里介绍一下Linux下显卡驱动安装方法。Intel针对集成显示芯片提供了两种驱动程序:i915Graphics和i810Graphics。    一、 使用82830M, 82…

ImportError: No module named dupefilters

报错信息: 代码: setting: # -*- coding: utf-8 -*-# Scrapy settings for testscrapyredis project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consult…

树莓派 触摸屏_树莓派加装3.5寸触摸屏方法和触摸屏问题处理

近期给树莓派3B加装了3.5寸触摸屏,遇到一些问题,记录如下:一、硬件连接准备好树莓派和3.5寸触摸屏,我这里使用的是3B,其他的型号应该也能兼容。3.5寸屏幕资料如下:3.5inch RPi Display​www.lcdwiki.comhtt…

注入补丁_关注 | 信用修复打补丁,注入守信正能量

为顺应社会诉求和完善社会信用体系,建立信用修复机制,国家税务总局发布了《国家税务总局关于纳税信用修复有关事项的公告》(国家税务总局公告2019年第37号),《公告》第一条明确了19种情节轻微或未造成严重社会影响的纳税信用失信行为&#xf…

R400在Ubuntu 9.04下安装官方ATI显卡驱动

R400在Ubuntu 9.04下安装官方ATI显卡驱动 Published on 2009/10/03 by harry. 0 Comments由于之前的hp笔记本突然挂了,一咬牙换了个thinkpad r400,不过他这个显卡是 ATI Radeon HD 3470,买之前就有点担心ubuntu下的驱动问题。结果果然折腾了一…

sublime加入input函数_(1条消息)解决不能在Sublime Text3中使用input函数输入内容的问题...

刚刚在上一篇博客中说Sublime Text3如何好用,结果编程中就发现了不能在它的控制台中输入内容给input函数。要解决该问题,需要使用插件:SublimeREPL。下面是解决方法,分享出来供大家参考:1. 安装插件:ctrlsh…

一年级小学计算机课教案,小学一年级信息技术教案

中学信息技术课程的开展是为了提升学生们对信息技术学科的了解,下面是小编想跟大家分享的中学信息技术教案,欢迎大家浏览。一、指导思想与任务目标:初中阶段信息技术课程,使学生初步具备获取信息、传输信息、处理信息和应用信息的…