比方說,我們有PRINTER_INFO_2
數組是這樣的:OS API在struct中分配成員。首先釋放結構或每個成員?
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++標記這個寶寶。 – 2009-10-26 08:41:49
非常感謝修復格式的人! – Kate 2009-10-26 08:53:10