目前,我有一个解决方案,但不确定在每种情况下是否都可以。使用此解决方案,我可以检查程序中是否存在内存泄漏?如果有人可以提供更好的解决方案,请随时分享答案。谢谢!
我的示例代码在这里:
int *array = new int[5];
delete[] array; //so no memory leaks
//Memory leak check.
if (_CrtDumpMemoryLeaks()) {
std::cout << "Memory leaks!\n";
}
else {
std::cout << "No leaks\n";
}
cin.get();
return 0;
在您的情况下,最合适的方法是您一开始就使用该CRT
库,实际上是_CrtDumpMemoryLeaks();
像Microsoft文档中所说的那样使用:
_CrtDumpMemoryLeaks函数确定自程序开始执行以来是否发生了内存泄漏。
关于您的其他疑问:
但我不确定在每种情况下都可以吗
根据Microsoft文档,它应该记录整个程序中发生的所有内存泄漏,即使它在类中或您可能认为的任何位置:
发生内存泄漏时转储调试堆中的所有内存块
同样不要忘记这里提到#define
的_DEBUG
标志:
如果未定义_DEBUG,则在预处理期间将删除对_CrtDumpMemoryLeaks的调用。
但是,如果要制作软件,则应使用STL并使用智能指针。
另外,您可能还可以使用另一种方式来一次检查某个资源的内存泄漏,我在调试时使用了Visual Studio提供的“内存”选项卡,该选项卡位于“调试>窗口>内存> memory1”(注意:在调试模式下查看设置),然后在搜索栏中键入内容array
,然后转到指向内存的位置,然后可以进入程序并查看内存是否为空。
注意:如果您想一次以视觉方式监视一个资源,而不是想要对每个可能泄漏的资源进行完整转储,则可以这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句