Во-первых, приведенный вами пример кода , а не ANSI C. Он больше похож на C ++. В C нет оператора «<<», который работает как выходной поток для чего-то, называемого «cout». </p>
Следующая проблема заключается в том, что если вы не используете free () в этой функции, вы потеряете память. Вы передали char *
, но как только вы присваиваете это значение возвращаемому значению malloc()
(избегайте приведения возвращаемого значения malloc()
на языке программирования C), переменная больше не указывает на какой-либо адрес памяти, который вы передали функция. Если вы хотите добиться этой функциональности, передав указатель на символьный указатель char **
, вы можете думать об этом как о передаче указателя по ссылке в C ++ (если вы хотите использовать такой язык в C, чего я бы не стал ).
Далее, вопрос о том, следует ли выделять / освобождать до или после вызова функции, зависит от роли функции. У вас может быть функция, задачей которой является выделение и инициализация некоторых данных, а затем возвращение их вызывающей стороне, в этом случае она должна malloc()
, а вызывающая сторона должна free()
. Однако, если вы просто выполняете некоторую обработку с помощью пары буферов, например, вы можете предпочесть, чтобы вызывающая сторона выделяла и освобождала. Но для вашего случая, поскольку ваша функция «validate_input», похоже, не делает ничего, кроме копирования строки без пробела, вы можете просто набрать malloc()
в функции и оставить ее вызывающей стороне. Хотя, поскольку в этой функции вы просто выделяете тот же размер, что и вся входная строка, кажется, что вы могли бы также иметь вызывающего для всего этого. Все действительно зависит от вашего использования.
Просто убедитесь, что вы не теряете указатели, как в этом примере