Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - liberare la memoria allocata dinamicamente
Forum - C/C++ - liberare la memoria allocata dinamicamente

Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 15:22
Venerdì, 20/01/2012
Salve volevo liberare la memoria che avevo occupato precedentemente in modo dinamico.
pensavo che il modo corretto di fare questo fosse di fare free(puntatore), dove puntatore è il puntatore al vettore allocato dinamicamente.

Codice sorgente - presumibilmente C/C++

  1. int *q;
  2.   q=(int*)malloc(5*sizeof(int));
  3.  
  4.   q[1]=3;
  5.   printf("val = %d\n", q[1]);
  6.  
  7.   free(q);
  8.  
  9.   q[1]=3;
  10.   printf("val = %d\n", q[1]);



questo codice è un esempio esplicativo della mia lacuna probabilmente. dopo aver liberato il puntatore q, provo a mettere il valore 3 in q[1]. Al momento dell'esecuzione del programma mi aspettavo di trovare "segmentation fault". e invece no! Mi viene addirittura ristampato il valore 3!
Sapeta aiutarmi?
grazie


PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
2
Down
V
Segnala al moderatore
Postato alle 15:31
Venerdì, 20/01/2012
Prova così:

Codice sorgente - presumibilmente C/C++

  1. int *q;
  2. q=(int*)malloc(5*sizeof(int));
  3. q[1]=3;
  4. printf("val = %d\n", q[1]);
  5. free(q);
  6. q = NULL;



Se provi ad aggiungere
Codice sorgente - presumibilmente Plain Text

  1. q[1]=3;
  2. printf("val = %d\n", q[1]);



Otterrai come voluto un errore, RICORDA che dopo un free(puntatore); devi fare puntatore = NULL; :heehee:

Ok si così ottengo un errore, grazie. - zaire90 - 20/01/12 15:47
il mio obiettivo però non era quello di ottenere un errore. quello che vorrei capire è se con free(q) sto effettivamente liberando la memoria allocata in precedenza o no. Si fa così? - zaire90 - 20/01/12 15:49
PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6124
Iscritto: 03/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 16:56
Venerdì, 20/01/2012
Sì ... liberi la memoria con free(puntatore) ... è corretto impostare il puntatore a NULL per evitare di utilizzarlo per errore dopo aver liberato la memoria.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM