Newsgroup: it.comp.os.linux.development
Titolo: domanda su malloc

Ciao a Tutti,
Vorrei porvi una domanda banale ...
Se scrivo una procedura del tipo:
prova(){
    char *stringa;
    stringa=(char *)malloc(20,sizeof(char));
}
All'uscita dalla funzione, la memoria allocata e' liberata
automaticamente o e' necessario usare free?
Grazie per un'eventuale risposta,
Michele

 
-- 
"Time flies like an arrow; fruit flies like a banana."

automaticamente o e' necessario usare free?
la seconda che hai detto
Oha
---
"Ci sono tre tipi di persone al mondo: quelle che sanno contare, 
e quelle che non ne sono capaci."

Quindi e' necessario usare free.
Grazie ad entrambi.
Ciao
Michele

 automaticamente o e' necessario usare free?
Perche` si liberi automaticamente devi usare alloca(3)
-- 
  /Kinkie
Se sulla scatola c'e` scritto "Per windows 95 e superiori", dovrebbe
funzionare sotto Linux, vero?

 
-- 


    stringa=(char *)malloc(20,sizeof(char));
A parte che questa e` calloc e non malloc, a parte che il cast non
serve, devi usare free.
Se non vuoi usare free usa alloca(3).
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

 serve, devi usare free.
malloc sarebbe:
stringa=(char*)malloc(20*sizeof(char));
Se non si fa il cast, il compilatore dą un warning.
Marco Iannaccone

Grazie ad entrambi per le risposte.
Ciao
Michele


Grazie per l'informazione.
Ciao
Michele

Se non si fa il cast, il compilatore dą un warning.
Proprio no, a meno che i tuoi header siano di qualche vecchio unix.
md@wonderland:tty1:~$cat test.c
#include <stdlib.h>
int main(void) {
    char *stringa=malloc(20*sizeof(char));
    exit(0);
}
md@wonderland:tty1:~$wcc test.c
test.c: In function `main':
test.c:3: warning: unused variable `stringa'
md@wonderland:tty1:~$cat `which wcc`
#!/bin/sh
exec /usr/bin/egcc \
        -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align \
        -Wwrite-strings -Waggregate-return \
        -Wstrict-prototypes -Wmissing-prototypes \
        -Wmissing-declarations -Wredundant-decls \
        -Wnested-externs -Woverloaded-virtual -Winline \
        -Wbad-function-cast \
        -fshort-enums -fstrict-aliasing $*
md@wonderland:tty1:~$
E non a caso nella man page e` documentata come:
       void *malloc(size_t size);


 Se non vuoi usare free usa alloca(3).
Aggiungerei che in alcuni unices (non so linux) la alloca() e' 
buggata (es. certe versioni di SunOS). 
-- 
Francesco P. Lovergine  f.lovergine AT 
iesi.ba.cnr.it

Se non si fa il cast, il compilatore dą un warning.
Mi pare che in C sia corretto, mentre il cast serve in C++.

buggata (es. certe versioni di SunOS). 
C'e` sempre alloca.c made in FSF.


 buggata (es. certe versioni di SunOS). 
Sotto linux dovrebbe funzionare bene.


Mi pare che in C sia corretto, mentre il cast serve in C++.
Aaarrrgghhh!!!!
Ciao, acc
a...@libero.it


 
Mangiate merda: miliardi di mosche non possono essersi sbagliate tutte.
		-- Bruno Gambarotta, citando un suo concittadino illustre

 C'e` sempre alloca.c made in FSF.
...e quella built-in di GCC.
Ciao
 David
-- 
<d.santinoli presso mi. flashnet. it>

 Perche` si liberi automaticamente devi usare alloca(3)
Dal manuale di Solaris 2.6:
     alloca() is machine-, compiler-, and most  of  all,  system-
     dependent.  Its use is strongly discouraged.
Ciao,
-- 
+-----------------------+----------------------------------------------+
|   Roberto Divia`      | Love at  first sight  is one of the greatest |
|   =============       | labor-saving devices the world has ever seen |
+-----------------------+----------------------------------------------+
|  CERN :  European Laboratory for Particle Physics,  1211  Geneva  23 |
|  Switzerland (CH)                      E-mail: 
Robert...@cern.ch
 |
+----------------------------------------------------------------------+

     dependent.  Its use is strongly discouraged.
Questo e` scritto anche nella man page della versione GNU, ma in pratica
e` una avvertenza tranquillamente ignorabile visto che la versione GNU
e` altamente portabile (almeno su OS scritti negli ultimi dieci anni).


 Perche` si liberi automaticamente devi usare alloca(3)
Mi pare che l'utilizzo della alloca oltre ad essere una indubbia
comodita' possa diventare pero' un "inquinante" per i processi mentali
dello sviluppatore che la usa perche' non lo obbliga piu' ad avere un
quadro completo delle procedure che occorre fare rientrare.
Matteo
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 writes:

Sicuramente deve essere usata "cum grano salis", visto che (se non ricordo
male) va ad allocare la memoria non nello heap, ma sullo stack. D'altronde, 
se si deve memorizzare una robina da 20 byte, locali alla funzione in
esecuzione, non vedo cosa ci sia di male (a parte eventuali problemi di
portabilita`).





 portabilita`).
eh no, non potrebbe essere altrimenti ma la porzione di memoria allocata va'
a' finire nell'heap non nello stack.
Ciao.