ASD Alokasi Memori Dinamis Alokasi Memori Dinamis v

  • Slides: 19
Download presentation
ASD Alokasi Memori Dinamis

ASD Alokasi Memori Dinamis

Alokasi Memori Dinamis v Untuk menggunakan sebuah variabel, kita harus mendeklarasikannya dulu v Pada

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

Fungsi-Fungsi Alokasi Memory

Fungsi-Fungsi Alokasi Memory

sizeof()

sizeof()

Latihan

Latihan

Cara membuat variabel tanpa deklarasi 1. Deklarasikan pointer yang menunjuk variabel yang akan dibuat

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)

Karakteristik Alokasi Memori Dinamis v Memori dapat dipesan atau dilepas sesuai kebutuhan pada saat

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

malloc: memesan memori untuk variabel baru (tipedata *) malloc(size); Membuat pointer yang menunjuk slot

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

free: menghapus variabel setelah digunakan void free(p. Mem. Block); free() ada di stdlib. h

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

Contoh tanpa malloc() #include <stdio. h> #include <conio. h> void main() { float jari,

Contoh tanpa malloc() #include <stdio. h> #include <conio. h> void main() { float jari, luas; jari = 7; luas = 3. 14 * jari; printf("lingkaran dengan jari-jari : %fn", jari); printf("luasnya : %fn", luas); getch(); }

Review Pointer

Review Pointer

Contoh dengan malloc() #include <stdio. h> #include <conio. h> #include <stdlib. h> void main()

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

Contoh tanpa malloc() #include <stdio. h> #include <conio. h> struct motor{ float amps; float

Contoh tanpa malloc() #include <stdio. h> #include <conio. h> struct motor{ float amps; float volts; }; typedef struct motor; void main() { motor m; m. volts = 4. 5; m. amps = 6; printf("volts = %f", m. volts); printf("amps = %f", m. amps); getch(); }

Latihan : dengan malloc? #include <stdio. h> #include <conio. h> #include <stdlib. h> struct

Latihan : dengan malloc? #include <stdio. h> #include <conio. h> #include <stdlib. h> struct motor{ float amps; float volts; }; typedef struct motor; void main() { motor *m; ? ? ? // Cek alokasi memory. . . // Free / bebaskan alokasi memory yang dipesan. . }

Peringatan!!! - malloc • Jika malloc() gagal memesan memori, akan mengembalikan NULL • Selalu

Peringatan!!! - malloc • Jika malloc() gagal memesan memori, akan mengembalikan NULL • Selalu cek apakah malloc() mengembalikan NULL: char *p. Msg; p. Msg = (char *) malloc (sizeof(char)); if (p. Msg == NULL) { printf(“Insufficient memory. Error Exitn”); return -1; }

Peringatan!!! malloc() • Selalu free() variabel yang sudah selesai dipakai • Jika tidak akan

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

Peringatan!!! - free • Hati – hati!!! : Jangan pernah mem-free slot memori yang

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

Peringatan!!! - free • free()membebaskan slot memori yang free() ditunjuk sebuah pointer. • Jika

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