alokasi memori dinamis
DESCRIPTION
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 PresentationTRANSCRIPT
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!!!
Fungsi-Fungsi Alokasi Memory
sizeof()
Latihan
Output:
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
Memori dapat dipesan atau dilepas sesuai kebutuhan pada saat program berjalan
Memesan slot memori menggunakan fungsi malloc
Melepas slot memori menggunakan fungsi free
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
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!
Contoh tanpa malloc()
Review Pointer
Contoh dengan malloc()
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; }
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 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! */
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 */
Tanpa malloc()
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}