questo è il mio dilemma:
ho un puntatore, dichiarato all'interno di una funzione, che faccio puntare ad una zona di memoria con malloc.
l'indirizzo della zona di memoria viene ritornato dalla funzione e assegnato ad un altro puntatore presente nel main.
quindi eseguo le mie operazioni nel main, ma ad un certo punto lo spazio allocato dinamicamente e puntato ora dal mio puntatore dichiarato nel main, non mi serve più.
quindi libero lo spazio puntato con free. è corretta la procedura? non è che rimane qualcosa, come dire, in "sospeso"?
io non credo, perchè, avendo dichiarato il puntatore iniziale che avevo inizializzato con malloc all'interno della funzione, questo muore con essa (ma non lo spazio allocato nello heap). ma aspetto smentite da chiunque abbia voglia di leggere le due righe di codice postate poco sotto...
codice:char *getString (char *tokenPtr); char *altrafunzione (char *s); int main(){ char *infix, *tokenPtr, *postfix; .........istruzioni varie......... //infix ora contiene un indirizzo che punta //ad una zona di memoria allocata dinamicamente //nella funzione getString infix = getString(tokenPtr); postfix = altrafunzione (infix); free (infix) /*libero la memoria per infix visto che non mi serve piu'*/ return 0; } char *getString (char *tokenPtr){ char *string, *cursor; int len; ...............istruzioni varie............. string = (char*) malloc (len * sizeof(char)); //string viene allocato dinamicamente if (string == NULL){ printf("\nImpossibile allocare memoria\n"); exit(1); } //copio la stringa puntata da cursor nell'area di memoria puntata da infix strcpy (string, cursor); strcat (string, " )"); //istruzione che serve al mio programma return string; //ritorno string che e' allocato dinamicamente }

Rispondi quotando
