Domanda su free()

di il
2 risposte

Domanda su free()

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

  • Re: Domanda su free()

    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 */
    
  • Re: Domanda su free()

    Grazie mille
Devi accedere o registrarti per scrivere nel forum
2 risposte