Я создал функцию, предназначенную для ввода пользователем. Он требует, чтобы память была назначена переменной, содержащей вход пользователя; однако эта переменная возвращается в конце функции. Каков правильный способ освободить выделенную память/вернуть значение переменной?Правильный способ свободной памяти возвращенной переменной
Вот код:
char *input = malloc(MAX_SIZE*sizeof(char*));
int i = 0;
char c;
while((c = getchar()) != '\n' && c != EOF) {
input[i++] = c;
}
return input;
Должен ли я вернуть адрес входа и освободить его после того, как она используется?
Любопытно, как правильно выбрать входную переменную.
Если вы 'malloc', в конечном итоге кому-то понадобится' free', будь то вы в другом api или вызывающем. Связанный, если поддерживается на вашей целевой платформе (-ах), ['getline'] (http://pubs.opengroup.org/stage7tc1/functions/getdelim.html), функция библиотеки, добавленная в POSIX.1-2008, * почти * делать то, что вы пытаетесь реализовать. Он по-прежнему требует, чтобы вызывающий пользователь в конечном итоге «освобождал» любые возвращенные распределения, но также предоставляет семантику повторного использования, где ваш код делает * not *. В зависимости от предполагаемого использования и целевой платформы (ей) это может быть целесообразно рассмотреть. – WhozCraig