[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