[Tech] OT - Programmazione C

Marco Ermini markoer@usa.net
Sab 21 Feb 2004 22:43:03 CET


On Sat, 21 Feb 2004 17:00:26 +0100, Valerio Montagnani <tech@vmontagnani.it>
wrote:

[...]
> > Liberare la RAM non significa cancellarla. Ma non ti eri comprato un
> > amnuale di C?!?
> 
> Sì, ma usano il termine "deallocare". Una persona inesperta, leggendo,
> potrebbe essere indotta a pensare: dealloacare = sinonimo di liberare.

Ti ha risposto correttamente Franco. Mettere a zero un'area di memoria non è
compito della funzione free - perché mai dovrebbe fare più di quello che è
deputata a fare, ovvero togliere un puntatore dall'heap?.

Tra l'altro, non so se hai presente ma il tuo caro Linux ha già le man page
delle funzioni di libc più importanti. Se solo lo guardassi te ne saresti
reso conto perfettamente:

man 3 free (o man 3 malloc)

[...]
calloc()  allocates memory for an array of nmemb elements of size bytes
          each and returns a pointer to the allocated memory.  The memory is
          set to zero.

malloc()  allocates  size  bytes and returns a pointer to the allocated     
          memory. The memory is not cleared.
[...]

Quindi se vuoi un'area di memoria pulita, o la pulisci con una strncpy o
un'altra funzione simile al momento che fai malloc, oppure usi calloc.



> Per
> questo ho provato a vedere che cosa succedeva scrivendo questo programmino
> e a stampare (dopo la deallocazione) il contenuto della memoria usata con
> accesso dinamico.


> > quest'ultima riga è un errore e può portarti al core dump. Cosa fai,
> > stampi un'area di memoria che non ti appartiene?!? are you crazy? ;-)
> 
> Come detto prima volevo solo vedere che cosa era successo alla locazione
> di memoria.

Peccato che in un ambiente multi-tasking un'altro processo potrebbe aver
allocato la ram appena liberata da te...



ciao
-- 
Marco Ermini
http://macchi.markoer.org - ICQ 50825709 - GPG KEY 0x64ABF7C6 - L.U. #180221
Perche' perdere tempo ad imparare quando l'ignoranza e' istantanea? (Hobbes)
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        non disponibile
Tipo:        application/pgp-signature
Dimensione:  189 bytes
Descrizione: non disponibile
URL:         <http://lists.linux.it/pipermail/flug-tech/attachments/20040221/df81aed0/attachment.pgp>


Maggiori informazioni sulla lista flug-tech