• Tidak ada hasil yang ditemukan

ASD Alokasi Memori Dinamis

N/A
N/A
Protected

Academic year: 2017

Membagikan "ASD Alokasi Memori Dinamis"

Copied!
18
0
0

Teks penuh

(1)

ASD

(2)

Alokasi Memori Dinamis

Alokasi Memori Dinamis

Untuk menggunakan sebuah variabel, kita harus

Untuk menggunakan sebuah variabel, kita harus

mendeklarasikannya dulu

mendeklarasikannya dulu

Pada saat deklarasi, slot memori dipesan untuk

Pada saat deklarasi, slot memori dipesan untuk

dipakai oleh variabel tersebut

dipakai oleh variabel tersebut

Setelah dideklarasikan, variabel bisa digunakan

Setelah dideklarasikan, variabel bisa digunakan

Ada cara untuk membuat variabel tanpa

Ada cara untuk membuat variabel tanpa

deklarasi!!!

deklarasi!!!

Variabel tersebut baru dibuat saat dibutuhkan

Variabel tersebut baru dibuat saat dibutuhkan

ketika program berjalan!!!

ketika program berjalan!!!

Setelah selesai digunakan, variabel tersebut

Setelah selesai digunakan, variabel tersebut

harus dihapus!!!

(3)
(4)
(5)
(6)
(7)

Cara membuat variabel

Cara membuat variabel

tanpa deklarasi

tanpa deklarasi

1.

1.

Deklarasikan pointer yang menunjuk variabel

Deklarasikan pointer yang menunjuk variabel

yang akan dibuat

yang akan dibuat

2.

2.

Jika pada saat program berjalan variabel

Jika pada saat program berjalan variabel

tersebut dibutuhkan

tersebut dibutuhkan

Pesan slot memori untuk menyimpan

Pesan slot memori untuk menyimpan

variabel (malloc)

variabel (malloc)

Simpan alamat slot memori pada pointer no

Simpan alamat slot memori pada pointer no

1

1

Gunakan variabel sesuai kebutuhan dengan

Gunakan variabel sesuai kebutuhan dengan

cara akses tak langsung melalui pointer

cara akses tak langsung melalui pointer

Hapus variabel / lepas slot memori setelah

Hapus variabel / lepas slot memori setelah

(8)

Karakteristik Alokasi Memori

Karakteristik Alokasi Memori

Dinamis

Dinamis

Memori dapat dipesan atau dilepas sesuai

Memori dapat dipesan atau dilepas sesuai

kebutuhan pada saat program berjalan

kebutuhan pada saat program berjalan

Memesan slot memori menggunakan fungsi

Memesan slot memori menggunakan fungsi

malloc

malloc

(9)

malloc:

malloc:

memesan memori untuk variabel

memesan memori untuk variabel

baru

baru

(tipedata *)

(tipedata *)

malloc(

malloc(

size);

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()

sizeof()

untuk

mengetahui

ukuran variabel).

malloc()

malloc()

prot

otype ada di

(10)

free:

free:

menghapus variabel setelah

menghapus variabel setelah

digunakan

digunakan

void free

void free

(pMemBlock);

(pMemBlock);

Pointer yang

menunjuk

variabel

free()

free()

ada di

stdlib.h

stdlib.h

IMPORTANT!!!!!!

IMPORTANT!!!!!!

:

jangan

free()

free()

pointer yang tidak pernah di

malloc()

malloc()

•Jangan

free()

free()

pointer yang sudah difree

(11)

Contoh tanpa

Contoh tanpa

malloc()

malloc()

#include <stdio.h>

#include <stdio.h>

#include <conio.h>

#include <conio.h>

int

int

main()

main()

{

{

float jari, luas;

float jari, luas;

jari = 7;

jari = 7;

luas = 3.14 * jari * jari;

luas = 3.14 * jari * jari;

cout << “

cout << “

lingkaran dengan jari-jari : “

lingkaran dengan jari-jari : “

<<

<<

jari;

jari;

cout <<

cout <<

\n

\n

luasnya : “

luasnya : “

<<

<<

luas;

luas;

getch();

getch();

}

(12)

Contoh dengan

Contoh dengan

malloc()

malloc()

#include <stdio.h> #include <stdio.h> #include <conio.h> #include <conio.h> #include <stdlib.h> #include <stdlib.h> void main() void main() { {

//deklarasi pointer//deklarasi pointer float *pjari, *pluas;

float *pjari, *pluas;

//memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer//memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer

pjari = (float *)malloc(sizeof(float));pjari = (float *)malloc(sizeof(float));

pluas = (float *)malloc(sizeof(float));pluas = (float *)malloc(sizeof(float));

if (if (pjari != NULL && pluas != NULLpjari != NULL && pluas != NULL){//jika berhasil memesan memori){//jika berhasil memesan memori

//gunakan variabel jari dan luas melalui pointer//gunakan variabel jari dan luas melalui pointer

*pjari = 7;*pjari = 7;

*pluas = 3.14 * *pjari * *pjari;*pluas = 3.14 * *pjari * *pjari;

cout << cout << "lingkaran dengan jari-jari : “"lingkaran dengan jari-jari : “ << << *pjari; *pjari;

cout << cout << ““\n\nluasnya : ", *pluas;luasnya : ", *pluas;

//menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas//menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas

(13)

Contoh tanpa

Contoh tanpa

malloc()

malloc()

#include <stdio.h>

#include <stdio.h>

#include <conio.h>

#include <conio.h>

struct motor{

struct motor{

float amps;

float amps;

float volts;

float volts;

};

};

typedef struct motor motor;

typedef struct motor motor;

int

int main()

main()

{

{

motor m;

motor m;

m.volts = 4.5;

m.volts = 4.5;

m.amps = 6;

m.amps = 6;

cout <<

cout << "volts =“

"volts =“ <<

<< m.volts;

m.volts;

cout <<

cout << “

“\n

\namps =“

amps =“ <<

<< m.amps;

m.amps;

getch();

getch();

}

(14)

Latihan : dengan

Latihan : dengan

malloc?

malloc?

#include <stdio.h>

#include <stdio.h>

#include <conio.h>

#include <conio.h>

#include <stdlib.h>

#include <stdlib.h>

struct motor{

struct motor{

float amps;

float amps;

float volts;

float volts;

};

};

typedef struct motor motor;

typedef struct motor motor;

void main()

void main()

{

{

motor *m;

motor *m;

// Buat alokasi memory dinamis

// Buat alokasi memory dinamis

// Cek alokasi memory ...

// Cek alokasi memory ...

// Free / bebaskan alokasi memory yang dipesan ....

// Free / bebaskan alokasi memory yang dipesan ....

}

(15)

Peringatan!!! - malloc

Peringatan!!! - malloc

• Jika

malloc()

malloc()

gagal memesan memori,

akan mengembalikan

NULL

NULL

• Selalu cek apakah

malloc()

malloc()

mengembalikan

NULL

NULL

:

char *pMsg;

char *pMsg;

pMsg = (char *) malloc (sizeof(char));

pMsg = (char *) malloc (sizeof(char));

if (pMsg == NULL)

if (pMsg == NULL)

{

{

cout <<

cout <<

“Insufficient memory. Error Exit”;

“Insufficient memory. Error Exit”;

return -1;

return -1;

}

(16)

Peringatan!!!

Peringatan!!!

malloc()

malloc()

• Selalu free() variabel yang sudah selesai

dipakai

• Jika tidak akan menyebabkan

‘memory

‘memory

leaks’

leaks’

(17)

Peringatan!!! - free

Peringatan!!! - free

Hati – hati!!!

Hati – hati!!!

:

Jangan pernah mem-free slot memori yang

sudah di free!

char *pMsg, *pWord, aLetter;

char *pMsg, *pWord, aLetter;

pMsg = (char *) malloc (20 * sizeof(char);

pMsg = (char *) malloc (20 * sizeof(char);

pWord = pMsg;

pWord = pMsg;

/* both point to same byte 0

/* both point to same byte 0

*/

*/

strcpy(pWord, “Welcome!\n”); /* use the memory */

strcpy(pWord, “Welcome!\n”); /* use the memory */

free(pMsg);

free(pMsg);

/* Free the memory.

/* Free the memory.

*/

*/

free(pWord);

(18)

Peringatan!!! - free

Peringatan!!! - free

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’;

char *pMsg, *pWord, letr = ‘A’;

pMsg = (char *) malloc (20 * sizeof(char));

pMsg = (char *) malloc (20 * sizeof(char));

/* reserve a memory block */

/* reserve a memory block */

pWord = pMsg;

pWord = pMsg;

/* another pointer to block*/

/* another pointer to block*/

pMsg = &aLetter;

pMsg = &aLetter;

/* pMsg now points to letr */

/* pMsg now points to letr */

Referensi

Dokumen terkait

perusakan yang dilakukan secara sengaja atau tidak sengaja, bukan hanya peralatan komputer, tapi juga arsip, data dan program...

Agenda konsolidasi birokrasi dan target keabsahan administrasi yang sudah muncul pada monev UU Ormas tahun ke-III sesungguhnya mengantarkan kita pada pemahaman

Berdasarkan hasil Penelitian maka didapatkan data sebagai berikut: Analisis Hasil validasi atau penilaian oleh keenam validator (internal dan eksternal) terhadap satuan

a) Time dependent killing. Lamanya antibiotik berada dalam darah dalam kadar diatas KHM sangat penting untuk memperkirakan outcome klinik ataupun kesembuhan. Pada kelompok ini

Perancangan dan realisasi perangkat keras sistem kendali suhu, kelembaban dan level air untuk pola cocok tanam hidroponik terdiri dari beberapa subsistem yaitu

Instrumen yang digunakan dalam penelitian aspek kognitif ini berupa tes objektif tentang materi sistem koloid yang terdiri dari 25.. butir soal dengan 5 alternatif

 Secara Nasional produksi padi Provinsi Sulawesi Tengah tahun 2015 mempunyai kontribusi sebesar 1,35 persen dari total produksi padi nasional sebesar 75,36 juta ton

Unit Akuntansi dan Pelaporan Keuangan Pembantu Pengguna Anggaran Eselon I yang selanjutnya disebut UAPPA-E1 adalah unit akuntansi pada unit Eselon I Kementerian