Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156

    [C] allocazione dinamica nel passaggio tra funzioni

    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
       
    }

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    La procedura è corretta.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    se in alternativa avessi passato l'indirizzo del puntatore, avrei dovuto scrivere così?

    codice:
    void getString (char *tokenPtr, char **string);
    
    main(){
    
         char *tokenPtr, *punct;
    
         ....................
         
         getString (tokenPtr, &punct);
    
         ...................
         
         free (punct);
    }
    
    
    void getString (char *tokenPtr, char **string){
    
           ......................
    
           string = (char**) malloc (len * sizeof(char) );
    
           .......................
    
           return;
    
    }
    anche in questo modo ottengo lo stesso risultato...
    se ha senso porre la domanda, quale metodo sarebbe più opportuno praticare?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No ... questa dovrebbe essere

    *string = (char*) malloc (len * sizeof(char) );

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    No ... questa dovrebbe essere

    *string = (char*) malloc (len * sizeof(char) );

    hai ragionissima

    e invece, per quanto riguarda la domanda finale: in questi casi è meglio utilizzare un puntatore passato per valore o uno passato per riferimento? o non c'è alcuna diferenza sostanziale?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non ho compreso l'ultima domanda ... vuoi sapere se e' meglio usare il primo metodo che hai mostrato o il secondo?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    Originariamente inviato da oregon
    Non ho compreso l'ultima domanda ... vuoi sapere se e' meglio usare il primo metodo che hai mostrato o il secondo?
    esattamente...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.