【发布时间】:2009-10-26 08:40:46
【问题描述】:
假设我们有一个 PRINTER_INFO_2 数组,如下所示:
PRINTER_INFO_2* printers = (PRINTER_INFO_2*)malloc(sizeof(PRINTER_INFO_2) * 64); // room for 64 items
然后我们调用EnumPrinters() 来获取本地安装的打印机列表:
EnumPrinters(
PRINTER_ENUM_LOCAL,
NULL,
2,
(LPBYTE)printers,
...);
这是PRINTER_INFO_2 的结构信息。
现在,字符串成员的类型是 LPTSTR,因此它们不会存储在结构本身内部。
我现在想知道的是,我是否可以在完成后直接调用free(printers),或者这会导致内存泄漏(所有这些字符串都没有被释放)?
我是否必须在每个字符串成员上调用free(),如下所示?
free(printers[i].pServerName);
free(printers[i].pPrinterName);
free(printers[i].pShareName);
...
free(printers);
这样对我来说似乎非常复杂。特别是如果结构有很多很多需要释放的成员。
有没有更好的方法来做到这一点?
感谢您帮助我解决这个问题!
【问题讨论】:
-
可能也想用 C++ 标记这个婴儿。
-
非常感谢为我修复格式的人!
标签: c++ memory struct pointers memory-leaks