Top Banner
Alokasi Memori Dinamis
19

Alokasi Memori Dinamis

Jan 12, 2016

Download

Documents

Alvis

Alokasi Memori Dinamis. Alokasi Memori Dinamis. Untuk menggunakan sebuah variabel , kita harus mendeklarasikannya dulu Pada saat deklarasi , slot memori dipesan untuk dipakai oleh variabel tersebut Setelah dideklarasikan , variabel bisa digunakan. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Alokasi Memori Dinamis

Alokasi Memori Dinamis

Page 2: Alokasi Memori Dinamis

Alokasi Memori Dinamis

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!!!

Page 3: Alokasi Memori Dinamis

Fungsi-Fungsi Alokasi Memory

Page 4: Alokasi Memori Dinamis

sizeof()

Page 5: Alokasi Memori Dinamis

Latihan

Page 6: Alokasi Memori Dinamis

Output:

Page 7: Alokasi Memori Dinamis

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)

Page 8: Alokasi Memori Dinamis

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

Page 9: Alokasi Memori Dinamis

malloc:memesan memori untuk variabel

baru

(tipedata *) malloc(size);

Membuat pointer yang menunjuk slot memori yang dipesan. Tipe pointer sesuai tipe variabel yang dibuat

Banyaknya slot memori yang dipesan untuk menyimpan variabel baru ( gunakan fungsi sizeof()untuk mengetahui ukuran variabel).

malloc()prototype ada di stdlib.h

Page 10: Alokasi Memori Dinamis

free:menghapus variabel setelah

digunakanvoid free(pMemBlock);

Pointer yang menunjuk variabel

free() ada di stdlib.h

IMPORTANT!!!!!!: • jangan free()pointer yang tidak pernah di malloc()• Jangan free() pointer yang sudah difree • Selalu free()variabel yang sudah selesai digunakan.

Jika tidak, akan menyebabkan: ‘memory leak’ – BAD!

Page 11: Alokasi Memori Dinamis

Contoh tanpa malloc()

Page 12: Alokasi Memori Dinamis

Review Pointer

Page 13: Alokasi Memori Dinamis

Contoh dengan malloc()

Page 14: Alokasi Memori Dinamis

Peringatan!!! - malloc• Jika malloc() gagal memesan memori,

akan mengembalikan NULL• Selalu cek apakah malloc()

mengembalikan NULL:

char *pMsg; pMsg = (char *) malloc (sizeof(char)); if (pMsg == NULL) { cout<<“Insufficient memory. Error Exit\n”; return -1; }

Page 15: Alokasi Memori Dinamis

Peringatan!!! malloc()• Selalu free() variabel yang sudah selesai

dipakai• Jika tidak akan menyebabkan ‘memory

leaks’• Bisa terjadi crash karena kehabisan

memori!

Page 16: Alokasi Memori Dinamis

Peringatan!!! - free• 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! */

Page 17: Alokasi Memori Dinamis

Peringatan!!! - 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 */ pWord = pMsg; /* another pointer to block*/ pMsg = &aLetter; /* pMsg now points to letr */ free(pWord); /* free the memory block */

Page 18: Alokasi Memori Dinamis

Tanpa malloc()

Page 19: Alokasi Memori Dinamis

Tugas : dengan malloc?#include <iostream>using namespace std;

struct motor{ float amps; float volts;};

int main(){

motor *m; ????? //cek alokasi memory //free/bebaskan alokasi memori yang dipesan}