strcpy
сам не выделяет память для строки назначения, поэтому нет, его не нужно освобождать.
Конечно, если что-то else выделило памятьтогда да, эта память должна быть в конце концов освобождена, но она не имеет ничего отношения к strcpy
.
Это предыдущее утверждение выглядит так, поскольку ваше определение является массивомсимволов указатели , а не массив символов:
char* buffer[LEN];
, и это будет почти , безусловно, будет сделано с:
buffer[n] = malloc (length);
ЭтоХорошая идея - начать думать с точки зрения ответственности за память, размещенную в malloc.Под этим я подразумеваю, что передача блока памяти malloc может также включать передачу ответственности за ее освобождение в какой-то момент.
Вам просто нужно выяснить (или решить, является ли это ваш код) ответственность зауправление памятью идет вместе с самой памятью.С strcpy
, даже если вы передаете в блоке, уже выделенном malloc, место назначения, ответственность передается , а не , поэтому вам все равно придется самостоятельно освобождать эту память.Это позволяет вам легко передавать в malloc'е или non-malloc'е буфер, не беспокоясь об этом.
Возможно, вы думаете о strdup
, который в основном делаеткопия строки, сначала выделив для нее память.Строка, возвращаемая из этого, должна быть определенно освобождена.