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

    [C] allocazione dinamica con passaggio di puntatori

    Semplificando di molto il concetto che voglio esprimere...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define SIZE
    
    int *allocFunc (void){
    	
    	int *data = NULL;
    	
    	data = (int*) malloc( sizeof(int) * SIZE);
    	
    	return data;
    }
    
    int main(){
    	
    	int *mydata;
    	
    	mydata = allocFunc();
    	
    	............
    		
    	free(mydata);
    	
    	return 0;
    }
    in questo caso devo utilizzare free per deallocare il puntatore data all'interno della funzione allocFunc? Mi verrebbe da dire di no visto che il puntatore muore quando esco dalla funzione... o mi sbaglio?

  2. #2

    Re: [C] allocazione dinamica con passaggio di puntatori

    Originariamente inviato da ilmo lesto
    Semplificando di molto il concetto che voglio esprimere...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define SIZE 1 /*prima era vuoto*/
    
    int *allocFunc (void){
    	
    	int *data = NULL;
    	
    	data = (int*) malloc( sizeof(int) * SIZE);
            /*Controllo sulla memoria allocata*/
            if(data == NULL){
                    printf("Errore allocazione");
                    exit(1);
            }
    	
    	return data;
    }
    
    int main(){
    	
    	int *mydata = NULL;
    	
    	mydata = allocFunc();
    	
    	............
    		
    	free(mydata);
            mydata = NULL;
    	
    	return 0;
    }
    Ho corretto un po' il codice
    in questo caso devo utilizzare free per deallocare il puntatore data all'interno della funzione allocFunc? Mi verrebbe da dire di no visto che il puntatore muore quando esco dalla funzione... o mi sbaglio?
    corretto

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il puntatore - data - muore all'interno della funzione allocFunz, ma il blocco di memoria ad esso associato viene trasferito a - mydata - sul quale poi userai la free.

    Immagina che il blocco di memoria sia un palloncino e il suo puntatore il filo.
    Se non vuoi che il palloncino scappi, devi sempre tenerlo legato in qualche modo.

  4. #4
    Se deallochi la memoria puntata da data nella funzione allocFunc,
    la stessa diventa inutile.


    Si la variabile puntatore diciamo che 'muore' quando termina la funzione,
    ma a noi non serve la variabile ma solo il suo valore...
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    grazie a tutti per le risposte, tutto chiaro!

    P.S. il codice l'ho scritto di getto ed era a titolo esemplificativo... per quello è pieno di inesattezze...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.