Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中查找内存泄漏+;visualstudio应用程序_C++_Visual Studio_Visual Studio 2010_Memory Leaks_Valgrind - Fatal编程技术网

C++ 在C+中查找内存泄漏+;visualstudio应用程序

C++ 在C+中查找内存泄漏+;visualstudio应用程序,c++,visual-studio,visual-studio-2010,memory-leaks,valgrind,C++,Visual Studio,Visual Studio 2010,Memory Leaks,Valgrind,在Linux中,我一直在使用valgrind检查应用程序中是否存在内存泄漏。Windows中的等效项是什么?使用VisualStudio 2010? 可以使用DevPartner工具在VisualStudio.c++中找到C++应用程序中的内存泄漏。p> 怎么样?它不是内置的,但我确实认为它是最流行的。在使用Visual Studio、Delphi和其他编译器构建的本机Windows程序中查找内存并处理泄漏。速度快,可以处理大量工作负载(一些用户在一次运行中跟踪数十亿次分配和释放) 公开:我是C

在Linux中,我一直在使用valgrind检查应用程序中是否存在内存泄漏。Windows中的等效项是什么?使用VisualStudio 2010?

可以使用DevPartner工具在VisualStudio.c++中找到C++应用程序中的内存泄漏。p> 怎么样?它不是内置的,但我确实认为它是最流行的。

在使用Visual Studio、Delphi和其他编译器构建的本机Windows程序中查找内存并处理泄漏。速度快,可以处理大量工作负载(一些用户在一次运行中跟踪数十亿次分配和释放)


公开:我是C++内存验证程序的设计者。我们之所以构建它,是因为当我们与SolidWorks R&D Ltd.合作时,其他工具无法处理工作负载。

Visual Studio 2015及更高版本具有本机内存泄漏诊断工具,查看此项了解详细信息:.

是一种内存监控工具,能够识别与内存相关的编程错误,例如访问未初始化内存、访问不可寻址内存(包括分配的堆单元外部和堆下溢和溢出)、访问已释放内存、双重释放、内存泄漏和(在Windows上)处理泄漏、GDI API使用错误以及对未保留线程本地存储插槽的访问

Dr.Memory在未经修改的应用程序二进制文件上运行,这些二进制文件运行在Windows、Linux、Mac或Android上的IA-32、AMD64和ARM硬件上


Dr.Memory是建立在dynamic instrumentation tool平台上的。

是检测本机(c或c++)应用程序泄漏的好工具。您可以将其与Visual studio或Windbg一起使用。Aaprt从内存泄漏开始,您可以检查堆损坏、无效句柄使用情况。将应用程序验证器与windbg(!analyze-v)一起使用提供了很好的洞察力。

Visual Studio 2019有一个不错的内存分析工具,它可以在调试时交互使用,也可以通过编程(无需调试)使用。下面我将展示两种情况下的一个最小示例

其主要思想是在进程开始和结束时对堆进行快照,然后比较内存状态以检测潜在的内存泄漏

交互地 创建以下
main.cpp
文件(在新的控制台应用程序中):

它做同样的事情,但是通过代码,所以您可以将其集成到自动构建系统中,函数获取快照并比较快照的内存状态,如果它们不同,则返回true

既然是这样,它就进入条件块,并通过几个函数打印有关泄漏的详细信息(请参阅和-后者不需要快照)

要查看输出,请在最后一行“return0”中放置一个断点,点击
F5
,然后查看调试控制台。以下是输出:


要获取更多信息,请参阅以下链接:

  • 互动分析:
  • 通过编程:和(也用于堆损坏)
用于跟踪本机(C++)内存泄漏的独立工具(CLI)。在发布模式下运行你的应用程序(PDB应该可用),并让它与之一起运行。它输出所有可疑的调用堆栈及其泄漏大小:


如果你喜欢在头上钻孔取乐,那当然。的可能副本已移动到,然后在2017年被明显放弃。似乎仍然适用于VS 2019,请参见此处:社区版中是否也提供此功能?我的VS 2017社区版中提供此功能,关于2015年还不确定。按照页面上的说明,我得到了“Dr.Memory internal crash”的任何建议?如果可行,DrM是很好的,但就像其他人发现的一样,Feb 2020 2.3.0.1容易出现内部SEGFULTS。这非常好。有没有办法查一查。混合数组
new[]
和错误的
delete
,2。访问释放的内存,3。其他破坏内存的方法,如越界访问等。4.访问未初始化的内存我不知道1,3和4,但我会使用静态分析工具。关于2(访问释放的内存),您可以使用
\u CRTDBG\u DELAY\u FREE\u MEM\u DF
标志(请参阅上面的链接“CRT调试堆文件”)。谢谢
OutputDebugStringW
LPCWSTR
所需的(3个字符不足以编辑,因为答案的其余部分是完美的!)
/fsanize=address
现在可以与x64和x86一起用于类似的内存问题。
#include <string.h>
int main()
{
 int a = 1;
 char* s = new char[17];
 strcpy_s(s,17,"stackoverflow_pb");
 char* ss = new char[14];
 strcpy_s(ss, 14,"stackoverflow");
 delete[] ss;
 return 0;
}
#include <iostream>

#include "windows.h"
#define _CRTDBG_MAP_ALLOC //to get more details
#include <stdlib.h>  
#include <crtdbg.h>   //for malloc and free
int main()
{
    _CrtMemState sOld;
    _CrtMemState sNew;
    _CrtMemState sDiff;
    _CrtMemCheckpoint(&sOld); //take a snapchot
    char* s = new char[17];
    strcpy_s(s, 17, "stackoverflow_pb");
    char* ss = new char[14];
    strcpy_s(ss, 14, "stackoverflow");
    delete[] ss;
    _CrtMemCheckpoint(&sNew); //take a snapchot 
    if (_CrtMemDifference(&sDiff, &sOld, &sNew)) // if there is a difference
    {
        OutputDebugString(L"-----------_CrtMemDumpStatistics ---------");
        _CrtMemDumpStatistics(&sDiff);
        OutputDebugString(L"-----------_CrtMemDumpAllObjectsSince ---------");
        _CrtMemDumpAllObjectsSince(&sOld);
        OutputDebugString(L"-----------_CrtDumpMemoryLeaks ---------");
        _CrtDumpMemoryLeaks();
    }
    return 0;
}