Memory leaks 使用Embarcadero 10.3.1时代码内存泄漏 我的C++代码是用ActuCabro0.103.1编写的。我面临着大量的内存泄漏和资源泄漏。我无法确定泄漏的原因

Memory leaks 使用Embarcadero 10.3.1时代码内存泄漏 我的C++代码是用ActuCabro0.103.1编写的。我面临着大量的内存泄漏和资源泄漏。我无法确定泄漏的原因,memory-leaks,c++builder,c++builder-10.3-rio,codeguard,Memory Leaks,C++builder,C++builder 10.3 Rio,Codeguard,当我使用CodeGaurd时,应用程序会冻结,因此我无法得出任何结论 我的应用程序是一个后台工作,它不断处理文件并生成标签。它可以正常工作几个小时,生成大约3000个标签,然后进入挂起/无响应状态 有人能提出解决方案吗?内存泄漏可能很难追踪。在您的情况下,我怀疑您使用的标签打印机有自己的库或驱动程序,泄漏可能在任何地方 首先,您应该尝试了解应用程序中存在哪些内存管理模型。使用C++ Builder代码,通常负责分配和释放内存。因此,使用new创建的每个对象都应该有一个相应的delete——确保您

当我使用CodeGaurd时,应用程序会冻结,因此我无法得出任何结论

我的应用程序是一个后台工作,它不断处理文件并生成标签。它可以正常工作几个小时,生成大约3000个标签,然后进入挂起/无响应状态


有人能提出解决方案吗?

内存泄漏可能很难追踪。在您的情况下,我怀疑您使用的标签打印机有自己的库或驱动程序,泄漏可能在任何地方

首先,您应该尝试了解应用程序中存在哪些内存管理模型。使用C++ Builder代码,通常负责分配和释放内存。因此,使用
new
创建的每个对象都应该有一个相应的
delete
——确保您了解代码的哪个部分负责释放对象。(在103.1c++Builder中支持C++ +代码> AutoPyTrp/代码>但您可能不使用此,并且不能保证链接的任何库代码都将遵守<代码> AutoPyTrp/C++ >语义。 如果要将信息传递到使用另一个内存管理模型的代码中(因此使用COM对象就是一个很好的例子),那么请确保理解内存管理的含义。如果你给它一个指针,它是希望释放它还是希望你释放它?如果是你,你怎么知道它什么时候完成了

试着运行一个较小的运行,看看是否可以使用CodeGuard并选择它建议的任何内容

如果您的系统正在生产中,您将希望保持其运行。一种选择是将其作为Windows计划任务运行。它将处理一组文件并退出。O/S将释放它在使用中的资源(但不会释放任何在系统级别泄漏的资源,可能是由错误的驱动程序泄漏的)。这可以让你在继续发现任何漏洞的同时,让它整天都在运行


祝你好运

您的应用程序是否静态链接到RTL?试试动态链接吧。没有MCVE或至少一些相关的代码,我们只能猜测。。。2.CodeGuard对于大型项目来说是不可用的,因为它的内存和CPU非常消耗,对于大型项目来说,正常执行需要几秒钟的时间可能需要几分钟,甚至会在CodeGuard中崩溃,但是如果您将不必要的内容减少到可管理的代码大小,那么CodeGuard是超级的。3.后台意味着多线程?4.将wdebug打印/日志添加到你的应用程序中,这样你就可以看到冻结前的最后一个已知状态。。。或者代码的哪些部分仍然运行正常…还请看一下:我在一个大型项目中创建了一个解决内存泄漏的程序,从而发现并解决了BCC编译器错误…标签打印应用程序真的很大吗?对于我来说,大约10-10万LOC的小项目在CodeGuard方面没有任何问题(但是CG)。你能把你的应用程序分解成更小的部分单独测试吗?你是如何意识到这个过程有漏洞的?通过任务管理器?如果它有泄漏,最后没有内存分配,进程宁愿崩溃,但它会变成无响应的。。。顺便说一句,你试过德莱克吗?最近版本支持C++ Builder。“在103.1 C++中,Builder支持C++ +代码> AutoPPTR <代码> -对于C++ 11和以后,它还支持<代码> UNQuyYPPTR < /C>和<代码> SyddyPt。