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
}