0

我的 C++ 代码是用 Embarcadero 10.3.1 编写的。我面临很多内存泄漏和资源泄漏。我无法识别泄漏。

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

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

任何人都可以提出任何解决方案吗?

4

1 回答 1

1

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

首先,您应该尝试了解应用程序中存在哪些内存管理模型。通常使用 C++ Builder 代码,您将负责分配和释放内存。因此,您创建的每个对象都new应该有一个对应的delete- 确保您了解代码的哪一部分负责释放该对象。(在 10.3.1 中,C++ Builder 确实支持 C++ auto_ptr,但您可能没有使用它,并且您不能保证您链接的任何库代码都会遵守auto_ptr语义)。

如果您将信息传递到使用另一个内存管理模型的代码中(因此使用 COM 对象是一个很好的示例),那么请确保您了解内存管理的含义。如果你传递一个指针,它是希望释放它还是希望你释放它 - 如果是你,你怎么知道它何时完成。

尝试运行较小的运行,看看是否可以使用 CodeGuard 并获取它建议的任何内容。

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

祝你好运!

于 2019-08-08T07:02:38.687 回答