Допустим, у нас есть массив 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);
Мне так ужасно сложно. Особенно, если в структуре много, много членов, которые должны быть освобождены.
Есть ли лучший способ сделать это?
Спасибо, что помогли мне с этим!