#string #memory-management #concatenation #strcat #strdup
#строка #управление памятью #конкатенация #strcat #strdup
Вопрос:
char* XX (char* str) { // ОБЪЕДИНИТЬ существующую строку с str и вернуть пользователю }
И я вызываю эту программу с помощью:
XX ( strdup("CHCHCH") );
Приведет ли это к утечке, не освобождая то, что strdup()
генерирует?
Маловероятно, что free результат XX()
выполнит эту работу.
(Пожалуйста, дайте мне знать как на C, так и на C , спасибо!)
Ответ №1:
Если аргумент не передан функцией XX free(), да, это вызовет утечку памяти как в C, так и в C .
Ответ №2:
ДА. Что-то должно free
быть результатом strdup
.
Вы могли бы рассмотреть возможность использования сборщика мусора Boehm и использовать GC_strdup
amp; GC_malloc
вместо strdup
amp; malloc
; тогда вам не нужно беспокоиться о вызове free
Ответ №3:
Да, это приведет к утечке. strdup
Результаты должны быть освобождены.
С другой стороны, для C я рекомендую использовать std::string
, а не char*
:
std::string XX( std::string const amp; in )
{
return in std::string( "Something to append" );
}
Это быстрый и грязный способ реализовать то, о чем вы говорите, но он очень удобочитаем. Вы можете добиться некоторого повышения скорости, передав изменяемую ссылку на строку для вывода, но если это не выполняется в очень узком цикле, для этого нет особых причин, поскольку это, вероятно, усложнило бы загрузку без значительного повышения производительности.