Si hanno due opzioni: una, passare un carattere * a una funzione e utilizzare quella invece di allocare all'interno di una funzione, o due, liberare il valore restituito in seguito.
La prima opzione:
char *somefunction(char *str, int somearg){
//some code
return str;
}
// Elsewhere...
char *str = (char *) malloc....;
somefunction(str, 123);
// Code...
free(str);
La seconda opzione:
char *somestr = somefunction(123);
// Do something...
free(somestr);
io personalmente suggerisco la prima opzione, in quanto è un po 'più facile per evitare che la memoria che perde quando non viene assegnato all'interno di funzioni arbitrari .
fonte
2009-08-20 12:17:42
L'argomento di 'malloc()' è quasi certamente sbagliato - stai allocando abbastanza memoria per memorizzare un 'char *', ma assegnando a un puntatore che punta a 'char' (e non è necessario eseguire il ritorno valore di 'malloc' in C, entrambi). 'str = malloc (N * sizeof * str);' è un modo migliore per scriverlo. – caf
Come detto da CAF, non si dovrebbe mai trasmettere il valore di ritorno di malloc(). Vedere http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc et al – Mawg