Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

ASD Alokasi Memori Dinamis.  Untuk menggunakan sebuah variabel, kita harus mendeklarasikannya dulu  Pada saat deklarasi, slot memori dipesan untuk dipakai.

Presentasi serupa


Presentasi berjudul: "ASD Alokasi Memori Dinamis.  Untuk menggunakan sebuah variabel, kita harus mendeklarasikannya dulu  Pada saat deklarasi, slot memori dipesan untuk dipakai."— Transcript presentasi:

1 ASD Alokasi Memori Dinamis

2  Untuk menggunakan sebuah variabel, kita harus mendeklarasikannya dulu  Pada saat deklarasi, slot memori dipesan untuk dipakai oleh variabel tersebut  Setelah dideklarasikan, variabel bisa digunakan  Ada cara untuk membuat variabel tanpa deklarasi!!!  Variabel tersebut baru dibuat saat dibutuhkan ketika program berjalan!!!  Setelah selesai digunakan, variabel tersebut harus dihapus!!!

3 Fungsi-Fungsi Alokasi Memory

4 sizeof()

5 Latihan

6

7 Cara membuat variabel tanpa deklarasi 1.Deklarasikan pointer yang menunjuk variabel yang akan dibuat 2.Jika pada saat program berjalan variabel tersebut dibutuhkan  Pesan slot memori untuk menyimpan variabel (malloc)  Simpan alamat slot memori pada pointer no 1  Gunakan variabel sesuai kebutuhan dengan cara akses tak langsung melalui pointer  Hapus variabel / lepas slot memori setelah variabel selesai digunakan (free)

8 Karakteristik Alokasi Memori Dinamis  Memori dapat dipesan atau dilepas sesuai kebutuhan pada saat program berjalan  Memesan slot memori menggunakan fungsi malloc  Melepas slot memori menggunakan fungsi free

9 malloc: memesan memori untuk variabel baru (tipedata *) malloc(size); Membuat pointer yang menunjuk slot memori yang dipesan. Tipe pointer sesuai tipe variabel yang dibuat sizeof() Banyaknya slot memori yang dipesan untuk menyimpan variabel baru ( gunakan fungsi sizeof() untuk mengetahui ukuran variabel). malloc() stdlib.h malloc() prot otype ada di stdlib.h

10 free: menghapus variabel setelah digunakan void free(pMemBlock); Pointer yang menunjuk variabel free() stdlib.h free() ada di stdlib.h IMPORTANT!!!!!! IMPORTANT!!!!!!: free()malloc() jangan free() pointer yang tidak pernah di malloc() free()Jangan free() pointer yang sudah difree free() memory leak BAD! Selalu free() variabel yang sudah selesai digunakan. Jika tidak, akan menyebabkan: ‘memory leak’ – BAD!

11 Contoh tanpa malloc() #include #include void main() { float jari, luas; jari = 7; jari = 7; luas = 3.14 * jari * jari; luas = 3.14 * jari * jari; printf("lingkaran dengan jari-jari : %f\n", jari); printf("lingkaran dengan jari-jari : %f\n", jari); printf("luasnya : %f\n", luas); printf("luasnya : %f\n", luas); getch(); getch();}

12 Review Pointer

13 Contoh dengan malloc() #include #include void main() { //deklarasi pointer //deklarasi pointer float *pjari, *pluas; //memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer //memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer pjari = (float *)malloc(sizeof(float)); pjari = (float *)malloc(sizeof(float)); pluas = (float *)malloc(sizeof(float)); pluas = (float *)malloc(sizeof(float)); if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori //gunakan variabel jari dan luas melalui pointer //gunakan variabel jari dan luas melalui pointer *pjari = 7; *pjari = 7; *pluas = 3.14 * *pjari * *pjari; *pluas = 3.14 * *pjari * *pjari; printf("lingkaran dengan jari-jari : %f\n", *pjari); printf("lingkaran dengan jari-jari : %f\n", *pjari); printf("luasnya : %f\n", *pluas); printf("luasnya : %f\n", *pluas); //menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas //menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas free(pjari); free(pjari); free(pluas); free(pluas); } getch(); getch();}

14 Contoh tanpa malloc() #include #include struct motor{ float amps; float volts; float volts;}; typedef struct motor motor; void main() { motor m; m.volts = 4.5; m.volts = 4.5; m.amps = 6; m.amps = 6; printf("volts = %f", m.volts); printf("volts = %f", m.volts); printf("amps = %f", m.amps); getch(); getch();}

15 Latihan : dengan malloc? #include #include struct motor{ float amps; float amps; float volts; float volts;}; typedef struct motor motor; void main() { motor *m; // Buat alokasi memory dinamis // Cek alokasi memory // Cek alokasi memory // Free / bebaskan alokasi memory yang dipesan.... }

16 Peringatan!!! - malloc malloc() NULLJika malloc() gagal memesan memori, akan mengembalikan NULL malloc() NULLSelalu cek apakah malloc() mengembalikan NULL : char *pMsg; pMsg = (char *) malloc (sizeof(char)); if (pMsg == NULL) { printf(“Insufficient memory. Error Exit\n”); return -1; } pMsg = (char *) malloc (sizeof(char)); if (pMsg == NULL) { printf(“Insufficient memory. Error Exit\n”); return -1; }

17 Peringatan!!! malloc() Selalu free() variabel yang sudah selesai dipakai ‘memory leaks’Jika tidak akan menyebabkan ‘memory leaks’ Bisa terjadi crash karena kehabisan memori!

18 Peringatan!!! - free Hati – hati!!!Hati – hati!!! : Jangan pernah mem-free slot memori yang sudah di free! char *pMsg, *pWord, aLetter; pMsg = (char *) malloc (20 * sizeof(char); pWord = pMsg;/* both point to same byte 0 */ strcpy(pWord, “Welcome!\n”); /* use the memory */ free(pMsg);/* Free the memory. */ free(pWord); /* RUNTIME ERROR! No block to free! */

19 Peringatan!!! - free free()free() membebaskan slot memori yang ditunjuk sebuah pointer. Jika ada pointer lain yang menunjuk ke alamat slot yang sama, maka pointer tersebut menjadi invalid! Jangan difree lagi! char *pMsg, *pWord, letr = ‘A’; pMsg = (char *) malloc (20 * sizeof(char)); /* reserve a memory block */ pMsg = (char *) malloc (20 * sizeof(char)); /* reserve a memory block */ pWord = pMsg; /* another pointer to block*/ pWord = pMsg; /* another pointer to block*/ pMsg = &letr; /* pMsg now points to letr */ pMsg = &letr; /* pMsg now points to letr */ free(pWord); /* free the memory block */ free(pWord); /* free the memory block */


Download ppt "ASD Alokasi Memori Dinamis.  Untuk menggunakan sebuah variabel, kita harus mendeklarasikannya dulu  Pada saat deklarasi, slot memori dipesan untuk dipakai."

Presentasi serupa


Iklan oleh Google