Page 176 - Project Akhir Media Pendidikan
P. 176
Pada program di atas, mula-mula kita memesan sejumlah ruang (alamat memori) untuk
menempatkan nilai yang bertipe int (yaitu pada alamat 0073FDE0) kemudian
mencatatnya ke dalam pointer P. Setelah melakukan proses terhadap pointer tersebut, di
atas kita memesan ruang kembali untuk menampung nilai dengan tipe double (yaitu
pada alamat 0073FDD8) dan mencatatnya kembali ke pointer P. Hal ini mengakibatkan
pointer P yang tadinya menunjuk alamat 0073FDE0 berpindah untuk menunjuk ke
alamat 0073FDD8, sehingga alamat 0073FDE0 tidak dapat diakses lagi yang akan
mengakibatkan terbuangnya ruang memori secara sia-sia. Kejadian semacam inilah
yang dinamakan dengan memory leak.
Untuk menghindari hal tersebut, seharusnya kita mendealokasikan alamat 0073FDE0
terlebih dahulu sebelum memerintahkan pointer P untuk menunjuk ke alamat yang baru,
yaitu dengan menggunakan fungsi free(). Jadi, sintak program tersebut seharusnya
dituliskan sebagai berikut.
#include <stdio.h>
int main(void) {
void *P;
int x = 10;
double y = 15.3;
P = (int *) malloc(sizeof(int));
P = &x;
printf(“Nilai P \t= %p\n”, P);
printf(“Nilai *P \t= %d\n\n”, *((int *) P));
/* Mendealokasikan pointer P dengan fungsi free() */
free(P);
P = (double *) malloc(sizeof(double));
P = &y;
printf(“Nilai P \t= %p\n”, P);
printf(“Nilai *P \t= %.1f\n”, *((double *) P));
return 0;
}
172