我的 C++ 代码是用 Embarcadero 10.3.1 编写的。我面临很多内存泄漏和资源泄漏。我无法识别泄漏。
当我使用 CodeGaurd 时,应用程序会冻结,所以我无法得出任何结论。
我的应用程序是一个后台作业,它不断处理文件并生成标签。它可以正常工作几个小时并生成大约 3000 个标签,然后进入挂起/无响应状态。
任何人都可以提出任何解决方案吗?
我的 C++ 代码是用 Embarcadero 10.3.1 编写的。我面临很多内存泄漏和资源泄漏。我无法识别泄漏。
当我使用 CodeGaurd 时,应用程序会冻结,所以我无法得出任何结论。
我的应用程序是一个后台作业,它不断处理文件并生成标签。它可以正常工作几个小时并生成大约 3000 个标签,然后进入挂起/无响应状态。
任何人都可以提出任何解决方案吗?
内存泄漏可能很难追踪。在您的情况下,我怀疑您正在使用带有自己的库或驱动程序的标签打印机,并且泄漏可能在任何地方。
首先,您应该尝试了解应用程序中存在哪些内存管理模型。通常使用 C++ Builder 代码,您将负责分配和释放内存。因此,您创建的每个对象都new
应该有一个对应的delete
- 确保您了解代码的哪一部分负责释放该对象。(在 10.3.1 中,C++ Builder 确实支持 C++ auto_ptr
,但您可能没有使用它,并且您不能保证您链接的任何库代码都会遵守auto_ptr
语义)。
如果您将信息传递到使用另一个内存管理模型的代码中(因此使用 COM 对象是一个很好的示例),那么请确保您了解内存管理的含义。如果你传递一个指针,它是希望释放它还是希望你释放它 - 如果是你,你怎么知道它何时完成。
尝试运行较小的运行,看看是否可以使用 CodeGuard 并获取它建议的任何内容。
如果您的系统正在生产中,您将希望保持其运行。一种选择是将其作为 Windows 计划任务运行。它将处理一定数量的文件并退出。O/S 将释放它正在使用的资源(但不会释放任何在系统级别泄漏的资源,可能是由错误的驱动程序泄漏的)。这可以让您在继续发现任何泄漏的同时保持它运行一整天。
祝你好运!