• VS2015 定位内存泄露


    如下代码,出现内存泄露,为检测这种情况,可以在最后一行添加_CrtDumpMemoryLeaks();,点击调式按扭,不需要添加断点,程序正常退出,查看输出选项卡,即可。

    #include <iostream>
    using namespace std;
    int main()
    {
    	int* p = new int;
    	_CrtDumpMemoryLeaks();
    	return 0;
    }
    

    输出选项卡的内容:

    Detected memory leaks!
    Dumping objects ->
    {148} normal block at 0x00F002B8, 4 bytes long.
     Data: <    > CD CD CD CD 
    Object dump complete.
    

    如上所示,在申请第148块内存时,发生内存泄露,我们需要在此处添加断点,添下如下代码_CrtSetBreakAlloc(148);,此函数参数148,即为内存泄露块标号。完整代码如下

    int main()
    {
    	_CrtSetBreakAlloc(148);
    	int* p = new int;
    	_CrtDumpMemoryLeaks();
    	return 0;
    }
    

    此时,不加任何断点,点击开始调式,那么就会断在内存泄露所在行。


    注:如果出现找不到函数,可以添加头文件crtdbg.h.
    关于全局变量:在阅读其他博客时,有博主说全局变量会在main函数之后释放,那么使用_CrtDumpMemoryLeaks();也可以检测到内存泄露,我在VS2015中测试,不存在这种问题。可能是版本原因,我也不清楚。
    关于定位到系统文件的问题,如STL原文件那么很可能是使用不规范造成内存泄露或库本生设计有问题。具体问题,具体分析,找大神解决吧。

  • 相关阅读:
    android数据恢复
    UVA 690 Pipeline Scheduling
    2017 国庆湖南 Day4
    2017 国庆湖南 Day5
    2017 国庆湖南 Day6
    2017国庆 清北学堂 北京综合强化班 Day1
    2017 国庆湖南Day2
    bzoj 2962 序列操作
    UVA 818 Cutting Chains
    UVA 211 The Domino Effect
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537733.html
Copyright © 2020-2023  润新知