Domanda su free()

di Anonimizzato21203 il
2 risposte
Salve, ho una domanda su dove usare free() quando allochiamo dinamicamente un'array in una funzione. Praticamente ho creato questa funzione che acquisisce una stringa, fa dei controlli e poi restituisce il puntatore che punta alla stringa allocata dinamicamente.
char *richiesta_stringa(){	
	char *risp=malloc(51);
	char tmp[52];//stringa dove effettuerò il controllo

	fgets(tmp, 52, stdin);//salva i primi 51 caratteri inseriti in tmp
	printf("|%s|\n%d\n", tmp, strlen(tmp));
	printf("%c\n", tmp[strlen(tmp)-1]);
	if(tmp[strlen(tmp)-1]=='\n'){//se l'ultimo carattere è il \n lo fa diventare \0. devo eliminare il \n perchè  se fossero stati inseriti esattamente 50 caratteri si avrebbe l'array [50char][\n][\0] e si avrebbe strlen(tmp)>50 anche se non è vero
		printf("%c\n|%s|\n", tmp[strlen(tmp)-1], tmp);
		tmp[strlen(tmp)-1]='\0';
	}
	if(strlen(tmp)>50){//potrei scrivere semplicemente else perchè se \n è presente in tmp vuol dire che ci sono al massimo 5o caratteri
		printf("ERRORE 004: parola immessa troppo lunga\nReinseriscila per favore: ");
		while(getchar()!='\n');//assorbe tutti i caratteri rimasti nel buffer fino a quando non incontra \n
		risp=richiesta_stringa();
		return risp;
	}
	strcpy(risp, tmp);
	if(strspc(risp)!=0){//la stringa inserita è vuota o composta solo da spazi e tabbature
		printf("ERRORE 002: parola immessa non valida\nReinseriscila per favore: ");
		risp=richiesta_stringa();
		return risp;
	}

	return risp;
}
strspc() è una funzione che controlla se la stringa è vuota ocomposta solo da spazi.

La domanda è: dove devo inserire free(risp) all'interno del codice?

grazie in anticipo

2 Risposte

  • Fuori da quella funzione.
    
    char* stringa_richiesta = richiesta_stringa();
    /* con stringa_richiesta faccio quel che mi serve */
    free(stringa_richiesta); /* ora che non mi serve più libero la memoria */
    
  • Grazie mille
Devi accedere o registrarti per scrivere nel forum
2 risposte