Alokasi Memori Dinamis
Download
Report
Transcript Alokasi Memori Dinamis
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
malloc()prot
otype ada di
stdlib.h
Banyaknya slot
memori yang
dipesan untuk
menyimpan
variabel baru
( gunakan fungsi
sizeof()untuk
mengetahui
ukuran variabel).
free:
menghapus variabel setelah digunakan
void free(pMemBlock);
free() ada di
stdlib.h
Pointer yang
menunjuk
variabel
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;
free(pWord);
*/
/* pMsg now points to letr */
/* 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
}