Oppure

Loading
20/01/12 14:22
zaire90
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.

  int *q;
  q=(int*)malloc(5*sizeof(int));

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

  free(q);

  q[1]=3;
  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

aaa
20/01/12 14:31
Prova così:

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


Se provi ad aggiungere
q[1]=3;
printf("val = %d\n", q[1]);


Otterrai come voluto un errore, RICORDA che dopo un free(puntatore); devi fare puntatore = NULL; :heehee:
20/01/12 15:56
nessuno
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à.