zoukankan      html  css  js  c++  java
  • vc不包含MFC就不打印内存泄露?

      无聊写了段测试代码,发现一个很费解的地方,下面这段代码是没有包含MFC的:

    #include "stdafx.h"
    
    struct stTest
    {
        int a;
        int b;
        char szTest[32];
        stTest()
        {
            a = 1;
            b = 2;
            sprintf(szTest, "abc");
        }
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        stTest* p = new stTest;
        printf("a = %d, b = %d, c = %s\n", p->a, p->b, p->szTest);
    
        getchar();
    
        return 0;
    }

    然后程序结束的时候并没有在输出面板打印内存泄露。如下图:

      如果程序包含了MFC,例如:

     

    #include "stdafx.h"
    #include "statci_new_test2.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 唯一的应用程序对象
    
    CWinApp theApp;
    
    using namespace std;
    
    struct stTest
    {
        int a;
        int b;
        char szTest[32];
        stTest()
        {
            a = 1;
            b = 2;
            sprintf(szTest, "abc");
        }
    };
    
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
        int nRetCode = 0;
    
        // 初始化 MFC 并在失败时显示错误
        if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
        {
            // TODO: 更改错误代码以符合您的需要
            _tprintf(_T("致命错误: MFC 初始化失败\n"));
            nRetCode = 1;
        }
        else
        {
            // TODO: 在此处为应用程序的行为编写代码。
            static stTest* p = new stTest;
            printf("a = %d, b = %d, c = %s\n", p->a, p->b, p->szTest);
    
            getchar();
        }
    
        return nRetCode;
    }

    那结果就不一样了,输出面板打印了内存泄露的信息:

    经过测试发现:如果程序包含了<afxwin.h>,那么程序结束时会在输出面板打印内存泄露信息,否则就不打印了。。。

     

  • 相关阅读:
    编写第一个 .NET 微服务
    Docker 基础知识编排在开发机上设置和使用 Kubernetes 环境
    将微服务部署到 Azure Kubernetes 服务 (AKS) 实践
    .NET Task.Run vs Task.Factory.StartNew
    Python上下文管理器
    Python可迭代的对象与迭代器的对比
    开发你的第一个SpringBoot应用
    Flask的Blueprints和Views
    Flask项目发布流程
    长篇大论Python生成器
  • 原文地址:https://www.cnblogs.com/yuohoo/p/2972446.html
Copyright © 2011-2022 走看看