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



...La saggezza di un singolo somiglia ad un albero conficcato alla meno peggio nel terreno...( HAGAKURE, codice 15)
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: 5475
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 ...
PM