zoukankan      html  css  js  c++  java
  • c++内存泄漏处理(积累)

    写c++程序时,常常会出现内存泄漏的问题,这里从网上找了一种非常麻烦的方法:假设想找到每一个cpp文件的内存泄漏,都必须在每一个cpp加上例如以下代码:

    #include <crtdbg.h>
    #ifdef _DEBUG
    #define DEBUG_CLIENTBLOCK   new(_CLIENT_BLOCK, __FILE__, __LINE__)
    #define new DEBUG_CLIENTBLOCK
    #else
    #define DEBUG_CLIENTBLOCK
    #endif

    以下给出一段測试的代码

    test.h

    #include <memory.h>
    
    void funNew();
    test.cpp

    #include "text.h"
    
    #include <crtdbg.h>
    #ifdef _DEBUG
    #define DEBUG_CLIENTBLOCK   new(_CLIENT_BLOCK, __FILE__, __LINE__)
    #define new DEBUG_CLIENTBLOCK
    #else
    #define DEBUG_CLIENTBLOCK
    #endif
    
    void funNew()
    {
    	int *p = new int();
    }
    main.cpp

    #include <iostream>
    #include <assert.h>
    #include "text.h"
    
    #include <crtdbg.h>
    #ifdef _DEBUG
    #define DEBUG_CLIENTBLOCK   new(_CLIENT_BLOCK, __FILE__, __LINE__)
    #define new DEBUG_CLIENTBLOCK
    #else
    #define DEBUG_CLIENTBLOCK
    #endif
    
    int main()
    {
    	_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    
    	int* p = new int();
    	funNew();
    	//delete p;
    	return 0;
    }

    输出

    Detected memory leaks!
    Dumping objects ->
    f:project1	est.cpp(13) : {157} client block at 0x001E9180, subtype 0, 4 bytes long.
     Data: <    > 00 00 00 00 
    f:project1main.cpp(17) : {156} client block at 0x001E9140, subtype 0, 4 bytes long.
     Data: <    > 00 00 00 00 
    Object dump complete.






  • 相关阅读:
    四种数据库随机获取10条数据的方法
    古诗词
    一份 Spring Boot 项目搭建模板
    2020年只剩两个月,今年你是怎么过的?
    关于使用LocalDateTime进行存储,时间相差比较多的问题。
    项目中常用的19条MySQL优化
    SpringBoot注解大全
    JDK8的LocalDateTime用法
    linux代理上网5分钟搞定
    SQL简单语句作用
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5096951.html
Copyright © 2011-2022 走看看