Selasa, Agustus 04, 2015

Programming in C - Part 19: Alokasi Memory secara Dinamis (Dynamic Memory Allocation)

Anda tentu masih ingat bahwa panjang sebuah array yang dideklarasikan harus diketahui sebelumnya.Jika tidak didefinisikan, maka program akan menampilkan pesan error pada saat kompilasi program. Sayangnya dalam banyak hal kita jarang sekali dapat mengetahui dengan pasti berapa banyak data yang akan dimasukkan ke dalam array. Bayangkan anda membuat sebuah software statistik sederhana dimana software tersebut akan menghitung jumlah dan rata-rata dari angka yang dimasukkan. Anda juga menginginkan deretan data yang dimasukkan user akan disimpan dalam sebuah array. Tentu saja anda tidak akan pernah tahu berapa banyak data yang akan dimasukkan oleh user.

Situasi seperti ini dapat diatasi dengan menggunakan teknik Dynamic Memory Allocation, dimana memory akan dialokasikan pada saat run time. Teknik ini juga akan mengurani beban pada memory stack karena data yang dimasukkan akan disimpan pada area lainnya, misalnya data segment pada memori komputer.
Untuk memahahi hal ini dapat dilihat program berikut ini
/* Alokasi memori dinamis
 * Created by     : Sastrawan
 * Topic        : Membuat dan akses array dengan alokasi memori dinamik
 * Nama File    : malloc1.c
 */
 
 #include<stdio.h>

 int main( int argc, char *argv[])
 {

    int *ptrAngka;
     ptrAngka = (int)malloc(4*2);
     *ptrAngka = 5 ;
     *(ptrAngka+1) = 6 ;

     printf ("\n%d ",*ptrAngka);
     printf ("\n%d ",*(ptrAngka+1));

     // realokasi memori dengan menambahkan satu blok lagi
     ptrAngka = (int *) realloc(ptrAngka, 4*3);
    
    *(ptrAngka+2) = 7 ;

    printf ("\n%d ",*ptrAngka);
    printf ("\n%d ",*(ptrAngka+1));
    printf ("\n%d ",*(ptrAngka+2));
 return 0 ;
 }


 Jika program diatas dikompilasi dan dijalankan maka akan didapatkan output :

5
6
5
6
7


Pada saat ini seharusnya anda sudah mampu membuat sebuah array dinamis yang elemennya ditambahkan langsung oleh user dengan kata lain menciptakan array pada saat run time.

Studi kasus :

Buat suatu program yang menerima masukan dari user kemudian meletakkan masukan integer dari user ke dalam array. Gunakan alokasi memory dinamis

Penyelesaian :

/* Alokasi memori dinamis
 * Created by     : Sastrawan
 * Topic        : Membuat dan akses array dengan alokasi memori dinamik
 * Nama File    : malloc2.c
 */
 
 #include<stdio.h>

 int main( int argc, char *argv[])
 {

    int *ptrAngka=NULL;
    int panjang;
    printf("Berapa banyak data yang akan anda masukkan ? ");
  
    scanf("%d",&panjang);
    printf("Tulis data anda, pisahkan dengan spasi atau enter ! ");

  
    ptrAngka = (int)malloc(4*panjang);
  
    int i; int angka ;
    for (i=0;i<panjang;i++) {
         scanf("%d",&angka);
         *(ptrAngka+i) = angka ;
    }
  
    // menampilkan array
    printf("DATA ANDA ADALAH :  \n");

  
    for (i=0;i<panjang;i++) {
        printf("%d ",*(ptrAngka+i)) ;
    }
  
 return 0 ;
 }


Jika dikompilasi dan dijalankan akan menghasilkan output sbb :

Berapa banyak data yang akan anda masukkan ? 5
Tulis data anda, pisahkan dengan spasi atau enter ! 1 2 3 4 5
DATA ANDA ADALAH :
1 2 3 4 5


Tips : Anda bisa menyimpan data dalam bentuk file teks, kemudian anda bisa menghitung berapa elemen data yang ada untuk selanjutnya menentukan ukuran array untuk pengolahan lebih lanjut dengan menggunakan dinamic memory allocation.

Penyimpanan data ke dalam file akan kita bahas di lain artikel.

0 comments:

Posting Komentar

Write your comment here