• 内存泄漏


    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中删除; 
  • 相关阅读:
    标准差、方差、协方差的简单说明
    样本的均值和方差的无偏估计
    Network In Network——卷积神经网络的革新
    Rethinking the inception architecture for computer vision的 paper 相关知识
    VIM的自动补全
    substitute 命令与 global 命令
    两个月全马训练参照表
    初跑者秘诀
    python3入门教程
    使用Python3.x抓取58同城(南京站)的演出票的信息
  • 原文地址:https://www.cnblogs.com/shaellancelot/p/4647877.html
Copyright © 2020-2023  润新知