Page 173 - PEMROGRAMAN DASAR MENGGUNAKAN C
P. 173

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;
                      }
   168   169   170   171   172   173   174   175   176   177   178