zoukankan      html  css  js  c++  java
  • 内存泄漏

    1. new和malloc()

         1.1 malloc()函数
               原型为--void *malloc(unsigned int num_bytes); 
               分配num_bytes字节的内存并返回所分配内存的指针,如果失败返回空指针(NULL);
               void* 类型可以强制转换为任何其它类型的指针;
               通过free()函数释放malloc()要求分配的内存,释放成功后应该将该指针指向NULL;
         1.2 new运算符
               new不仅申请要求分配内存,还会为被分配的内存调用构造函数;
               对应地,delete在释放内存之前也会为内存调用析构函数;
               new分配内存失败时,返回std::bad_alloc异常;
         1.3 new与malloc()的区别
               new自动计算分配的内存空间,malloc需要自己设置;
               new返回的是对象(执行了构造函数),malloc返回的是内存地址;
               new是类型安全的,malloc无法实现此功能;
               new是运算符,maaloc是C的库函数;
     
    2. 内存泄露
         2.1 内存泄露分为两种--堆(heap)内存泄露和系统内存泄露(socket未被释放);
         2.2 _CrtDumpMemoryLeaks()函数可以在输出窗口显示内存泄露的信息,如:
                 int* i = new int(0);// not be delete
                 _CrtDumpMemoryLeaks();
                 return;
               将会输出如下内容: 
          Detected memory leaks!
            Dumping objects ->
          {234} normal block at 0x003007A8, 4 bytes long.
          Data: <    > 00 00 00 00 
          Object dump complete.
               CRT堆调试技术不仅仅用来检测内存泄露,还可以检测缓冲区是否溢出;
               CRT的原理就是匹配内存分配和内存释放操作,每次分配内存则将指针保存在list中,释放时再从list中删除; 
  • 相关阅读:
    C#通过正则表达式统计词频的一个方法
    本地服务器远程连接其它数据库
    拼字符串成为时间,和两个计算时间点的中间值
    删除文件夹里的图片,打印删除日志
    行转列SQL语句
    加载出一个有层次的下拉框
    查询结果列传行
    【Java&Python双管齐下复健002】回文数和反转数
    【Java&Python双管齐下复健001】冒泡排序和质数判断
    【LeetCode记录】初级算法:数组之删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/shaellancelot/p/4647877.html
Copyright © 2011-2022 走看看