Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione al C
p = malloc(sizeof(int));
• crea in memoria una variabile di tipo int
• restituisce l’indirizzo della variabile creata (primo byte)
• assegna l’indirizzo restituito a p
*p = 7;
• la variabile di tipo int creata assume il valore 7
printf("%d", *p);
• viene stampato a video 7
Puntatori - Unità 6 2013/2014 Pagina 5
Modello di allocazione dinamica
L’allocazione dinamica della memoria avviene nello heap.
Se lo spazio di memoria allocabile dinamicamente è esaurito viene
restituito il puntatore NULL.
int main() {
int *p;
double *d;
p = malloc(sizeof(int));
*p = 7;
printf("%d", *p);
free(p);
d = malloc(sizeof(double));
*d = 7;
printf(" %f", *d);
free(d);
}
Puntatori - Unità 6 2013/2014 Pagina 8
Tempo di vita delle variabili allocate
dinamicamente (1/2)
Per le variabili allocate dinamicamente il tempo
di vita corrisponde al periodo che va
Ø dal momento in cui la variabile viene allocata
Ø al momento in cui la variabile viene deallocata.
int main() {
int* pt2 = creaint(5);
printf("*pt2 = %d\n", *pt2);
}
int *temp, k;
for (k = 1; 1 ; k++) {
printf("k = %d\n", k);
temp = malloc(sizeof(int));
}
int *pt1;
pt1 = malloc(sizeof(int)); // allocazione della variabile
*pt1 = 1;
printf("*pt1 = %d\n", *pt1); // uso della variabile
free(pt1);
// la locazione di memoria rimane accessibile dopo free!!!
printf("after free\n");
printf("*pt1 = %d\n", *pt1);
// la stessa locazione di memoria potrebbe essere ri-allocata!!!
int *pt2 = malloc(sizeof(int));
printf("after malloc\n");
printf("*pt2 = %d\n", *pt2);