【问题标题】:Memory leaks in C++ using FindFile and file handles [closed]使用 FindFile 和文件句柄的 C++ 中的内存泄漏 [关闭]
【发布时间】:2015-08-28 17:42:01
【问题描述】:

我正在编写一个在 Windows 上移动文件的应用程序,但我有一些内存泄漏。我现在无法访问代码,但我知道我忘记关闭用于使用 FindFirstFile 和 FindNextFile 遍历文件的文件句柄。这会导致内存泄漏,还是我的代码有其他问题?我现在无法发布任何片段,但我想知道这是否是我造成的问题。

【问题讨论】:

  • 我现在无权访问代码并且我现在无法发布任何片段 - 然后等待发布,直到您获得访问权并且可以包含代码。 为什么我的代码不能正常工作?没有代码只是猜测,这不是问题和猜测或问题和猜测网站。
  • "我知道我忘记关闭用于使用 FindFirstFile 和 FindNextFile 遍历文件的文件句柄" - 那么你肯定有泄漏,所以如果你已经知道了为什么还要问它知道吗?
  • @RemyLebeau 这正是我想知道的,如果未关闭的文件句柄可能导致内存泄漏。我无法发布代码,因为它在我办公室的计算机上,而我在周末无法访问它。它一直困扰着我代码可能有什么问题,所以我想问:)

标签: c++ windows winapi c++11 memory-leaks


【解决方案1】:

内存泄漏只是资源泄漏的一种特殊情况。文件句柄也是资源。所以你肯定会泄露各种资源。

顺便说一句,你如何检查内存泄漏?

您的问题不是编写 C++ 代码,而是使用 C++ 编译器编译的 C 代码。 WINAPI 不是 C++。要在 C++ 中实际使用它,您必须将所有资源包装在实现 RAII 的类中,以便可以在 C++ 代码中安全地使用它们,而不必担心资源泄漏。您还应该使用智能指针(std::unique_ptr 和 std::shared_ptr)来管理您的内存。

【讨论】:

  • 我刚刚检查了程序使用了多少内存,而且它使用的内存远远超过 2gigs,这都是为了检查内存泄漏。我正在对使用 new char[] 创建的数组使用一些 char*,但我在这些数组上使用 delete[]。我没有使用任何智能指针,我不知道这些。
  • @Fulaphex 你真的需要学习 C++。到目前为止,您使用的是带有new 和delete 的C,而不是malloc 和free。名称不同,但您仍然强迫自己手动管理内存。大多数通用的现代 C++ 代码应该读起来像 Python,没有任何类型的显式内存管理。确保您至少使用最新的 Windows 7,Windows XP 上的内存使用指示几乎是荒谬的。
猜你喜欢
  • 2020-12-20
  • 2010-09-23
  • 2011-06-28
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多