【问题标题】:Does WINAPI automatically free memory attached to controls?WINAPI 会自动释放附加到控件的内存吗?
【发布时间】:2016-12-24 09:04:55
【问题描述】:

只是一个关于 WIN32 api 的简单问题。
我有一个使用 MySQL C API 连接到 MySQL 的函数,它检索指向结构的指针的链接列表。

因此,在对话回调中,我用这些元素填充ListView 控件,并将每个元素结构指针附加到ListView 中的一行。

问题是:我是否应该在从ListView 中删除所有项目后释放指针,例如当我单击刷新按钮时?
还是 WIN32 API 为我释放了它们?

【问题讨论】:

  • 使用 WinAPI 调用,您负责清理附加到控件的资源。
  • 谢谢你这么精确和清晰
  • 想确认你真的用 C 而不是 C++ 做这个吗?这很难。在 C 语言中,您必须更加细致地管理内存。
  • 是的,在 C 语言中,只是因为我遇到了段错误双重释放或损坏,我认为这是由于 winapi 已释放内存而我重新做了它
  • WIN32 API 无法释放您分配的结构,因为它不知道它是如何分配的。所以当然你必须自己释放它

标签: c winapi


【解决方案1】:

从列表视图中删除项目时,您有责任清理通过LVITEM 结构的lParam 成员引用的所有资源。 Windows API 不会为您执行此操作。

事实上,Windows API 无法为您做到这一点。它无法知道指针是否指向使用newmallocIMalloc 或任何其他分配器分配的内存。或者也许指针指向一个静态分配的数组,并且不需要完全释放。或者它甚至可能不是一个指针,而是一个用于排序的哈希值,或者是其他结构的索引。

由于只有您知道如何解释 lParam,因此有关资源管理的所有责任都在您身上。与some opinions相反,C++ 在这里帮不了你。

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多