Newsgroup: it.comp.lang.c
Titolo: Allocare in una funzione e deallocare in un'altra

E possibile allocare un array in una funzione e deallocarlo in un'altra?
In pratica si può fare:
void pippo(){
    a=calloc(n, sizeof(int));
    pluto(a);
}
void pluto(int *a){
    free(a);
}
Chiedo questo poichè nella mia pippo si può uscire o alla fine della
funzione o da un ramo di un if e vorrei evitare di riscrivere nella stessa
funzione 10 free() due volte.
Grazie

 funzione 10 free() due volte.
Non hai scelta.  Come ho già detto 10 milioni di volte, una funzione
dovrebbe avere UN UNICO punto di uscita.  In quel caso, deallocheresti
solo alla fine.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 solo alla fine.
Magari, ma non riesco proprio a trovare una soluzione

 Magari, ma non riesco proprio a trovare una soluzione
??? in che senso ? ... è sempre possibile riscrivere una funzione con più
punti d'uscita in una con un solo punto d'uscita.


 punti d'uscita in una con un solo punto d'uscita.
OK, ho aggiunto un else ed una flag in && con la condizione di uscita del
for.
GRazieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee, dei consigli

 }
Tecnicamente non ci sono problemi. Puo` sorgere un problema di
leggibilita` perche` potrebbe non essere evidente dove il puntatore
viene deallocato.
Personalmente, se c'e` di mezzo qualcosa di piu` di una semplice
allocazione, preferisco avere una coppia di funzioni simmetriche per
allocare e deallocare, ad esempio:
foo* alloc_foo(...) {
        /* allocazione ed inizializzazione /
}
void free_foo(...) {
        /* finalizzazione e deallocazione */
}
Luca
-- 
Home: 
http://kronoz.cjb.net
"New processes are created by other processes, just like new
 humans. New humans are created by other humans, of course,
 not by processes." -- Unix System Administration Handbook

 punti d'uscita in una con un solo punto d'uscita.
Certamente.
Io pero' quello di avere un solo punto di uscita lo considererei piu'
un indirizzo generale che una regola imprescindibile.
Ci possono essere dei casi di algoritmi particolarmente complessi nei
quali voler forzare a tutti i costi una unica uscita potrebbe
portare ad un allontanamento da quella che e' l'idea di partenza
dell'algoritmo, e quindi ad un codice complessivamente meno leggibile
e piu' lungo, magari anche con flag booleani che nell'idea originale
non c'erano, e quindi piu' prono agli errori.
Forse io, per deformazione professionale, ho piu' in mente programmi
di tipo matematico/combinatoriale con scarsa necessita' di portabilita',
manutentibilita' e riuso, mentre in ambito professionale probabilmente
forzarsi all'applicazione di regone alla lunga aiuta.
In ogni caso questo tipo di cose e' un argomento sul quale in passato
abbiamo avuto modo piu' volte di essere in disaccordo (sull'applicazione 
ferrea di prescrizioni e divieti), senza peraltro sfanculizzarci a vicenda.
Io, se penso che l'implementazione piu'
elegante e veloce di un algoritmo contempla l'uso di un famigerato
"goto" non ho nessuna vergogna ad usarlo... anche se in generale ne
sconsiglierei l'uso. Quindi in pubblico posso anche approvare il
tuo approccio, ma in privato, per i miei programmini a mio uso e
consumo,  non posso fare a meno di applicare il mio, un pochino piu' 
elastico :-)
ciao,
g.

 un indirizzo generale che una regola imprescindibile.
Io sono dell'idea che meno operazioni si fanno in una funzione, meglio è.
Questo significa che le condizioni per arrivare all'uscita della funzione
devono essere poche.  Poco codice da saltare con un if o con un goto.
Le regole spannometriche per determinare la qualità di una funzione
vengono ignorate da moltissime persone ;-)
Alla fine è una questione di scelte.  Io prediligo la leggibilità e la
manutenibilità del codice.


 ha scritto nel messaggio
news:UBTve.23885$D7.6...@twister1.libero.it...

CRedo sia meglio aggiungere una flag ed avere una unica uscita e la
deallocazione nella stessa funzione dove c'e' stata l'alocazione.
CRedo....., vero?