Newsgroup: it.comp.lang.c
Titolo: Allocazoine memoria in una funzione

Salve a tutti. Qualcuno sa come si fa ad allocare memoria tramite una
funzione?
Es.:
void alloca(char *var)
{
var=(char*)malloc(300*sizeof(char));
}
main()
{
char *tmp;
alloca(tmp);
/* la memoria deve essere allocata qui e non che rimanga all'interno della
funzione come accade cosě facendo*/
}
Grazie
Ciao

you wrote :
#void alloca(char *var)
#{
#var=(char*)malloc(300*sizeof(char));
#}
void alloca( char **var )
{
     *var = malloc( 300 ) ;
}
sia il cast sul valore di ritorno di malloc che la misura sizeof(char)
possono essere omessi.
Il primo perche' ormai con lo standard il cast e' automatico, il
secondo perche' e' identicamente uguale a 1 su ogni piattaforma.
--------------------------------------------------------
* Andrea Laforgia        (
andrea_...@bigfoot.com
) *
--------------------------------------------------------


ha scritto:

Poichč il passaggio dei parametri viene effettuato per valore, la
funzione alloca non modifica il puntatore passato come parametro
attuale.
Devi modificare il tuo programma come segue
void alloca(char *(*var))
{
	var=(char*)malloc(300*sizeof(char));
}
int main()
{
	char *tmp;
	alloca(&tmp);
}
_____________________________________________________
Francesco Trotta
http://space.tin.it/computer/ftrotta
elimina "x_" dal mio indirizzo per le risposte

you wrote :
#void alloca(char *(*var))
                 ^^^ perche' le parentesi ?
#	var=(char*)malloc(300*sizeof(char));
(char*) non e' necessario
sizeof(char) e' uguale a 1 su ogni piattaforma.


 non ricordo bene ma credo che una malloc allochi memoria fino a che
finisce il programma nel qual caso il tuo commento non avrebbe senso.

finisce il programma nel qual caso il tuo commento non avrebbe senso.
Dipende dalla piattaforma: sotto DOS tutta la memoria allocata viene
liberata automaticamente alla fine del programma mentre sotto Win32 se non
deallochi la memoria esplicitamente sprechi delle risorse. Sotto Unix non
so.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------

>
  void alloca(char **var)
  {
    *var = (char*)malloc(300*sizeof(char));
  }	
 
int main()
{
	char *tmp;
	alloca (&tmp);
}
Bonf

 ok....ma io sto dicendo che se allochi memoria in una funzione e ritorni
il puntatore a tale blocco di memoria alla main non succede che la memoria
viene liberata...o no?

 viene liberata...o no?
No, non viene liberata al ritorno alla main(). Devi liberarla tu
esplicitamente con una chiamata a free() quando non ti serve più.
EMG

 Appunto...é quello che sto dicendo io!

viene liberata...o no?
Anche se allocata in una funzione la memoria dinamica rimane valida per
tutto il programma, almeno fino a quando non la deallochi esplicitamente
(vedi free(void *)).
Ciao, Giuseppe
---------------------------------------------------------------------------


 Ok....stiamo dicendo la stessa cosa...io rispondevo al messaggio di alex
taro che allocava memoria in una funzione e chiedeva che questo avvenisse
nella main....nulla di più!
ciao Giuseppe