Не приведет ли следующее использование strdup () к утечке памяти в C? - PullRequest
0 голосов
/ 11 ноября 2011

char * XX (char * str) { // CONCAT существующей строки с помощью str и возврат к пользователю }

И я называю эту программу:

XX ( strdup("CHCHCH") );

Приведет ли это к утечке, не выпуская то, что генерирует strdup()?

Маловероятно, что бесплатный результат XX() сработает.

(Пожалуйста, дайте мне знать, как на C, так и на C ++, спасибо!)

Ответы [ 3 ]

3 голосов
/ 11 ноября 2011

Если аргумент XX функции free () не передан, да, это приведет к утечке памяти в C и C ++.

1 голос
/ 11 ноября 2011

Да, это будет утечка.Результаты strdup должны быть освобождены.

Для C ++, с другой стороны, я рекомендую использовать std::string вместо char*:

std::string XX( std::string const & in )
{
   return in + std::string( "Something to append" );
}

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

1 голос
/ 11 ноября 2011

Да.Что-то должно free результат strdup.

Вы можете рассмотреть возможность использования сборщика мусора Бома и использовать GC_strdup & GC_malloc вместо strdup & malloc;тогда вам не нужно беспокоиться о звонке free

...