Stworzyłem funkcję zaprojektowaną w celu uzyskania informacji od użytkownika. Wymaga to przydzielenia pamięci do zmiennej przechowującej dane wejściowe użytkownika; jednak ta zmienna jest zwracana na końcu funkcji. Jaka jest właściwa metoda zwolnienia przydzielonej pamięci/zwrócenia wartości zmiennej?Właściwy sposób na zwolnienie pamięci zwróconej zmiennej
Oto kod:
char *input = malloc(MAX_SIZE*sizeof(char*));
int i = 0;
char c;
while((c = getchar()) != '\n' && c != EOF) {
input[i++] = c;
}
return input;
powinienem wrócić adres wejścia i wolne to po to służy?
Ciekawy co do najbardziej odpowiedniej metody na uwolnienie zmiennej wejściowej.
Jeśli "malloc", w końcu ktoś będzie musiał "za darmo", czy to ty w innym api lub dzwoniącym. Powiązane, jeśli obsługiwane na platformach docelowych, ['getline'] (http://pubs.opengroup.org/stage7tc1/functions/getdelim.html), funkcja biblioteczna dodana do POSIX.1-2008, wydaje się * prawie * robić to, co próbujesz zaimplementować. Nadal wymaga, aby wywołujący ostatecznie "zwolnił" wszelkie zwrócone alokacje, ale także zapewnia semantykę ponownego użycia, gdzie twój kod * nie *. W zależności od przeznaczenia i platformy docelowej, może być warte rozważenia. – WhozCraig