230 likes | 498 Views
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.
E N D
Alokasi Memori Dinamis • Untukmenggunakansebuahvariabel, kitaharusmendeklarasikannyadulu • Padasaatdeklarasi, slot memoridipesanuntukdipakaiolehvariabeltersebut • Setelahdideklarasikan, variabelbisadigunakan • Adacarauntukmembuatvariabeltanpadeklarasi!!! • Variabeltersebutbarudibuatsaatdibutuhkanketika program berjalan!!! • Setelahselesaidigunakan, variabeltersebutharusdihapus!!!
Cara membuatvariabeltanpadeklarasi • Deklarasikan pointer yang menunjukvariabel yang akandibuat • Jikapadasaat program berjalanvariabeltersebutdibutuhkan • Pesan slot memoriuntukmenyimpanvariabel (malloc) • Simpanalamat slot memoripada pointer no 1 • Gunakanvariabelsesuaikebutuhandengancaraaksestaklangsungmelalui pointer • Hapusvariabel / lepas slot memorisetelahvariabelselesaidigunakan (free)
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
malloc:memesanmemoriuntukvariabelbaru (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 mengetahuiukuran variabel). malloc()prototype ada di stdlib.h
free:menghapusvariabelsetelahdigunakan void free(pMemBlock); Pointer yang menunjuk variabel free() ada di stdlib.h • IMPORTANT!!!!!!: • janganfree()pointer yang tidakpernahdimalloc() • Janganfree() pointer yang sudahdifree • Selalufree()variabel yang sudahselesaidigunakan. Jikatidak, akanmenyebabkan: ‘memory leak’ – BAD!
Peringatan!!! - malloc • Jikamalloc()gagalmemesanmemori, akanmengembalikanNULL • Selalucekapakahmalloc()mengembalikanNULL: char *pMsg; pMsg = (char *) malloc (sizeof(char)); if (pMsg == NULL) {cout<<“Insufficient memory. Error Exit\n”; return -1; }
Peringatan!!! malloc() • Selalu free() variabel yang sudahselesaidipakai • Jikatidakakanmenyebabkan‘memory leaks’ • Bisaterjadi crash karenakehabisanmemori!
Peringatan!!! - free • Hati – hati!!! : Janganpernahmem-free slot memori yang sudahdi 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! */
Peringatan!!! - free • free()membebaskan slot memori yang ditunjuksebuah pointer. • Jikaada pointer lain yang menunjukkealamat slot yang sama, maka pointer tersebutmenjadi invalid! Jangandifreelagi! 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 */
Tugas : denganmalloc? #include <iostream> using namespace std; struct motor{ float amps; float volts; }; int main() { motor *m; ????? //cekalokasi memory //free/bebaskanalokasimemori yang dipesan }