Приведет ли следующее использование strdup() к утечке памяти в C?

#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" );
}
  

Это быстрый и грязный способ реализовать то, о чем вы говорите, но он очень удобочитаем. Вы можете добиться некоторого повышения скорости, передав изменяемую ссылку на строку для вывода, но если это не выполняется в очень узком цикле, для этого нет особых причин, поскольку это, вероятно, усложнило бы загрузку без значительного повышения производительности.