Artikel Terbaru

2 Cara untuk Mengakses Array di Luar Batas Bahasa C

Pada bahasa pemrograman tingkat tinggi seperti Java, ada fungsi yang dapat digunakan untuk mencegah user untuk mengakses array diluar batas yang menghasilkan pengecualian seperti java.lang.ArrayIndexOutOfBoundsException. Tetapi pada bahasa C, tidak terdapat fungsi seperti yang dijelaskan tersebut, sehingga programmer perlu melakukan suatu pengkondisian khusus pada program untuk dapat melakukan pembatasan akses tersebut.

Jika Programmer Secara Tidak Sengaja Mengakses Indeks Array Bahasa C yang Berada di Luar Batasan
Bahasa C tidak memberikan spesifikasi apapun yang berhubungan dengan masalah pengaksesan indeks yang bersifat tidak valid, dimana sesuai standar ISO C hal ini disebut dengan Undefined Behavior.

Undefined Behavior (UB) pada bahasa C merupakan hasil dari eksekusi kode program yang perilakunya tidak ditentukan oleh spesifikasi bahasa C yang dapat dipatuhi oleh kode program tersebut untuk status program saat ini seperti memori. Kondisi ini terjadi biasanya ketika kompilator kode sumber membuat suatu asumsi tertentu tetapi asumsi tersebut tidak terpenuhi selama waktu eksekusi.

Contoh Undefined Behavior Ketika Mengakses Arrau di Luar Batas
satu, Akses Non Alokasi Lokasi Memori: program akan mengakses beberapa potongan memori yang dimiliki oleh kode program itu sendiri.

Contoh:

// Program untuk

// mendemostrasikan akses

// array diluar dari batasan

// pada bahasa C.

#include <stdio.h>

 

int main()

{

int arr[] = {1,2,3,4,5};

printf("arr [0] adalah %d\n", arr[0]);

 

// arr[10] berada diluar

// batasan.

printf("arr[10] adalah %d\n", arr[10]);

 

return 0;

}

Output:
arr [0] adalah 1
arr[10] adalah -1786647872


Catatan: arr[10] sedang mengakses lokasi memori yang berisi nilai garbage.

dua, Segmentasi Fault: program mengakses beberapa potongan program yang tidak dimiliki oleh kode program itu sendiri, yang menyebabkan program crash.

Contoh:

// Program untuk

// mendemostrasikan akses

// array diluar dari batasan

// pada Bahasa C.

#include <stdio.h>

 

int main()

{

int arr[] = {1,2,3,4,5};

printf("arr [0] adalah"

" %d\n",arr[0]);

 

printf("arr[10] adalah"

" %d\n",arr[10]);

 

// Alokasi memori diluar dari

// batasan elemen.

arr[10] = 11;

printf("arr[10] adalah"

" %d\n",arr[10]);

return 0;

}

Output:
Runtime Error : Segmentation Fault (SIGSEGV)

Catatan:
  • Program tetap berada di dalam batas array dalam pemrograman bahasa C ketika menggunakan array untuk menghindari kondisi error.
  • C++ menawarkan template class std::vector, yang tidak perlu melakukan pemeriksaan batas pada program. Vector juga memiliki fungsi anggota std::at() yang dapat melakukan pemeriksaan batas.

Komentar

  1. Terjadi kesalahan ketika user mengetik arr[5] dan berada diluar batas yang sebenarnya dilakukan oleh kompilator adalah pengaksesan alamat (arr + (5*sizeof(int)) dan menetapkan nilai pada alamat saat ini dapat menyebabkan nilai bermasalah.

    BalasHapus
    Balasan
    1. Bisa jadi, hanya mastah2 yang tahu apakah program bahasa c ini yang benar atau tidak. :D

      Hapus
  2. Apaka beberapa kode program dapat bekerja diluar batas kode program bahasa C?

    BalasHapus
    Balasan
    1. Iya, Beberapa kode program pada bahasa c dapat bekerja diluar batas tanpa terjadi segmetation fault.

      Hapus

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D

Hot Artikel!!!

Enkapsulasi pada Java

6 Tahap Utama dalam Melakukan Kompilasi Program Hello World Java

6 Contoh Program Method Overloading pada Java