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
   171   172   173   174   175   176   177   178   179   180   181