Ho creato una funzione progettata per ottenere l'input dell'utente. Richiede che la memoria sia allocata alla variabile che contiene l'input dell'utente; tuttavia, tale variabile viene restituita alla fine della funzione. Qual è il metodo corretto per liberare la memoria allocata/restituire il valore della variabile?Modo corretto per liberare la memoria di una variabile restituita
Ecco il codice:
char *input = malloc(MAX_SIZE*sizeof(char*));
int i = 0;
char c;
while((c = getchar()) != '\n' && c != EOF) {
input[i++] = c;
}
return input;
Devo restituire l'indirizzo di ingresso e liberarla dopo che è stato utilizzato?
Curioso come il metodo più appropriato per liberare la variabile di input.
Se si 'malloc', alla fine qualcuno avrà bisogno di' free', sia che si tratti di un'altra API o del chiamante. Correlati, se supportati sulle piattaforme di destinazione, ['getline'] (http://pubs.opengroup.org/stage7tc1/functions/getdelim.html), una funzione di libreria aggiunta a POSIX.1-2008, sembrerebbe per * quasi * fare ciò che stai cercando di implementare. Richiede comunque al chiamante di "liberare" qualsiasi allocazione restituita, ma fornisce anche la semantica del riutilizzo, dove il codice * non *. A seconda dell'uso previsto e delle piattaforme di destinazione, può valere la pena di prendere in considerazione. – WhozCraig