2016-12-23 22 views
5

只是一个关于WIN32 API的简单问题。
我有一个使用MySQL C API连接到MySQL的函数,它检索指向结构体的链接列表。WINAPI会自动释放附加到控件的内存吗?

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

问题是:我是否应该在从ListView除以LVM_DELETEALLITEMS之后释放指针,例如当我单击刷新按钮时?
或者WIN32 API为我释放它们吗?

+6

使用WinAPI调用,您负责清理附加到控件的资源。 – t0mm13b

+0

感谢这是如此精确和清晰 –

+0

想要确认你是否真的在C而不是C++中这样做?这很难。在C语言中,你必须更加细致地进行内存管理。 –

回答

5

当删除从列表视图中的项目,你是负责清理,可通过LVITEM结构的lParam的成员引用的任何资源。 Windows API不会为你做这个。

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

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