[Tech] OT - Programmazione C

Marco Ermini markoer@usa.net
Mer 18 Feb 2004 20:05:28 CET


On Wed, 18 Feb 2004 18:20:32 +0100, Valerio Montagnani <tech@vmontagnani.it>
wrote:

> Ciao a tutti.
> 
> Ho provato a scrivere un programmino che allocasse dinamicamente un po' di
> memoria, stampasse indirizzo e contenuto di una cella e infine liberasse
> la RAM allocata precedentemente. Ho aggiunto, dopo la funzione free, una
> printf che avrebbe dovuto stampare i valori della cella di ram ottenuti
> prima di aver liberato la memoria. Mi sarei aspettato un errore o un
> risultato casuale, dato che quella locazione sarebbe dovuta essere vuota,
> mentre il computer mi ha restituito gli stessi valori di prima. E'
> possibile che abbia sbagliato a liberare la ram?

Liberare la RAM non significa cancellarla. Ma non ti eri comprato un amnuale
di C?!?



> #include <stdio.h>
> float *buff[10];
> main() {
>  if ((buff[10]=(float *)malloc(10)))==NULL) {
>   printf("Errore di allocazione.");
>   exit(1);
>  }
>  printf("%p %d\n",&buff[5],buff[5]);
>  free(buff);
>  printf("%p %d\n",&buff[5],buff[5]);

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? ;-)

Comunque è logico che ritorni la stessa cosa... l'hai solamente tolta
dall'heap, NON l'hai cancellata... per quello devi usare una memcpy o
qualcosa del genere... anche se ripeto, NON USARE aree di memoria che non ti
appartengono!


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/20040218/1e01da71/attachment.pgp>


Maggiori informazioni sulla lista flug-tech