Problema lettura da file

di il
2 risposte

Problema lettura da file

Devo leggere un file intero riga per riga.. utilizzo questo codice..

int loadPerm(FILE* ingresso, nodo_t** r){
	
	int n;
	n=0;
	if(ingresso==NULL)
        return -1;
    
    nodo_t** p=r;
    
    
    char* stringa=(char*)malloc(sizeof(char)*(LRECORD+2));
    
    if(stringa==NULL){
    	free(stringa);
        return -1;
    }
    stringa=fgets(stringa,LRECORD+2,ingresso);
    
    while(stringa!=NULL){
    printf("String: %s \n", stringa);     
    
    printf("Sto aggiungendo %s \n",stringa);
    permesso_t* record=convertiRecord(stringa);
    
    stringa=fgets(stringa,LRECORD+2,ingresso);
    printf("STRINGA: %s \n",stringa);
    free(record);   
    }
    free(stringa); 
	return n;	
}
il mio problema e' che (giustamente) la free sulla stringa non viene fatta in quanto una free su un puntatore a NULL non ha effetto,pero' la memoria mi rimane comunque allocata, come posso fare a deallocare "stringa"?

2 Risposte

  • Re: Problema lettura da file

    pegasus_1987 ha scritto:


    il mio problema e' che (giustamente) la free sulla stringa non viene fatta in quanto una free su un puntatore a NULL non ha effetto,pero' la memoria mi rimane comunque allocata, come posso fare a deallocare "stringa"?

    Allora, se non erro, non hai bisogno della free poiché se la malloc non va a buon fine(NULL) non viene di fatto allocata memoria nell'heap, e quindi ti basta semplicemente gestire l'errore.
    Questione diversa per la realloc che, qualora dovesse restituire NULL lascia comunque il "valore" del puntatore invariato. In quel caso si ha memory leak e bisogna liberare lo spazio precedentemente allocato(altrimenti resta occupato fino al riavvio del sistema).
    Spero di non avere convinzioni errate, se lo sono fatemi un fischio
  • Re: Problema lettura da file

    Grazie per la risposta, ma io intendevo che la free finale,quella dopo il while,non ha nessun effetto...non mi libera la memoria...risposte?
Devi accedere o registrarti per scrivere nel forum
2 risposte