问题标签 [crtdbg.h]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
151 浏览

c++ - 使用堆调试 MS VC++ 2005

我启用了堆调试来尝试调试一些内存泄漏错误。我通过包括以下内容来做到这一点:

连同_CrtDumpMemoryLeaks()对感兴趣函数的调用。

然后我还编辑项目属性配置以将调试类型设置为'Native Only'并添加预处理器定义'_DEBUG'和 C/C++ 代码生成运行时库/MDd。我发现无论我把_CrtDumpMemoryLeaks()函数调用放在哪里,它都会如下转储内存泄漏输出。

这可能意味着什么?这是否意味着如果在调用点有转储输出,那么错误/泄漏实际上发生在此之前?我们可以肯定地得出结论吗?如果没有,它似乎不是一个真正有用的实用程序。任何关于如何正确使用它或关于解释的建议/帮助表示赞赏。谢谢!

0 投票
3 回答
4449 浏览

c++ - 内存泄漏检测文件错误

我有一个程序应该输出有关其内存泄漏的信息。但是,它不起作用。以下是程序:

我正在构建 DEBUG 版本,因此不应忽略这些功能。我使用的编译器是Visual Studio 2010。该程序只创建一个文件“Memory Leaks.txt”,但文件中没有内容。有什么想法吗?

- 编辑 -

我已经按照建议更新了程序以使用“正确的文件句柄”。该程序仍然没有向文件输出任何内容。

- 编辑 -

问题在于关闭文件。下面的代码现在可以工作了。

0 投票
1 回答
227 浏览

c++ - 重置 CRT 调试堆中的高水位计数

_CrtMemState由返回的结构_CrtMemCheckpoint()包含一个size_t lHighWaterCount成员,该成员给出了自应用程序启动以来的最大内存使用量。我正在编写一个关心高水位线的测试台,但它在一次运行中运行多个测试,我只能在第一次测试中可靠地获得高水位线:如果高水位线在第二次测试,我只知道高水位线小于或等于第一次测试。

有没有办法将 CRT 调试堆的高水位标记重置为当前分配大小?

0 投票
2 回答
16489 浏览

c++ - _CRTDBG_MAP_ALLOC 不显示文件名

我正在尝试检测内存泄漏,并且我正在使用 make _CRTDBG_MAP_ALLOC 宏来定位泄漏区域的位置。所以我定义 MACRO 如下:

在我的代码中,我有:

(感谢 Tushar Jadhav:内存消耗迅速增加,然后非常缓慢地下降;内存泄漏?

但输出显示如下:

而不是这样的:

那么我怎样才能让它显示泄漏的文件名和位置呢?

0 投票
0 回答
278 浏览

c++ - 使用 _CrtDumpMemoryLeaks 的 BOOST_LOG_TRIVIAL 内存泄漏

我正在使用 Visual Studio 2010 和 boost 库。我正在尝试使用在主函数退出后调用的 _CrtDumpMemoryLeaks 来查找内存泄漏。我很确定 boost_log_trivial 不会泄漏内存。如何避免这种误报?

源代码:

输出:

0 投票
2 回答
7018 浏览

c++ - 在 Visual C++ (Windows) 中检测内存泄漏

我正在 Visual Studio 2010 下开发一个大型 C++ 项目,并认为内部存在一些内存泄漏。我尝试了包含 crtdbg.h 的方法,但它没有多大帮助,因为我看不到泄漏发生在哪里。定义 new 有两个陷阱:首先它需要在每个 cpp 文件中完成,这不是一个真正的选项,第二它与例如 Boost 中断。使用 new(nothrow) 或任何使用 boosts "has_new_operator.h" 的东西都会打破这一点。[编辑:它无法编译,因为重新定义的“new”对于“nothrow”或“boost magic”之类的东西没有重载](除非在所有 boost 标头(包括引用 boost 的标头)之后定义“new”)

最后但同样重要的是:我有单身人士。它们是使用单例模板的子类和静态函数变量来实现的。其中之一是一个配置容器,其中一个注册设置(比存储在映射中的字符串和整数对)由于在解除分配单例实例之前调用了内存泄漏转储,因此所有这些字符串和单例本身。

有什么方法可以只显示真正的泄漏或在静态对象释放后转储?

哪些免费工具可以处理这种情况?

0 投票
3 回答
4695 浏览

c++ - Visual Studio 内存泄漏检测不打印文件名和行号

我想检查我的程序是否存在内存泄漏,并找到了这篇 Microsoft 文章

我彻底遵循了这篇文章并添加了

当程序退出时。

它会在我的输出窗口中正确转储所有内存泄漏信息,但问题是:

它不会打印内存泄漏所在的文件名和行号!

它在文章中说用#define _CRTDBG_MAP_ALLOC它打印文件名和行号,但它不适合我。

我的输出看起来像这样

所以我真的不能用那个......按 F4 去排队也不起作用。

请你帮助我好吗?

0 投票
1 回答
4849 浏览

crtdbg.h - 错误 C1083:无法打开包含文件:'crtdbg.h':没有这样的文件或目录

我正在尝试在 Visual Studio 2013 中编译 cpp 代码。它之前工作正常。但现在我收到以下错误:

错误 1 ​​错误 C1083:无法打开包含文件:'crtdbg.h':没有这样的文件或目录 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h 250 1 IDEditor

我检查了 crtdbg.h。该文件存在于"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include"路径中。

看起来它无法包含上述目录。我尝试在属性中添加路径,但仍然遇到同样的问题。

请帮忙

0 投票
0 回答
785 浏览

c++ - C1189:#error:错误:使用 C 运行时库内部头文件

我正在尝试使用 VS 2008 Professional 和 windows CE 6.0 SDK 构建代码。

我收到一个错误致命错误 C1083:无法打开包含文件:'crtdbg.h':没有这样的文件或目录。我在 Tools ->options->VC++ Directories->Include 中包含了以下路径

这个文件在我的启动项目中使用。我的解决方案有 10 个项目(MFC 静态库)。10 个中有 9 个编译成功。只是这个项目给出了这个错误。因此,在该项目的其他目录中包含路径 C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src。现在它给了我这个错误。你能帮我么。

0 投票
2 回答
3499 浏览

c - 找不到VsCode crtdbg.h,如何解决?

试图检查内存泄漏工具,但 Vscode 无法识别#include <crtdbg.h>

这是代码:

编译错误:

如何正确包含 crtdbg.h?

PS:我正在使用 MinGW 编译器,除此之外一切正常。

编辑1:其他帖子的解决方案不起作用。如果我使用建议的代码,则会出现。

编辑 2:有没有人将 VsCode 与 MinGW 一起使用?