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中删除; 
  • 相关阅读:
    第六周活动进度表
    第二周活动进度表
    第一周活动进度表
    冲刺二阶段-个人总结10
    冲刺二阶段-个人总结09
    冲刺二阶段-个人总结08
    第一次冲刺-站立会议07
    第一次冲刺-站立会议06
    第一次冲刺-站立会议05
    第一次冲刺-站立会议04
  • 原文地址:https://www.cnblogs.com/shaellancelot/p/4647877.html
Copyright © 2011-2022 走看看