Lompat ke konten Lompat ke sidebar Lompat ke footer

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.

2 Cara untuk Mengakses Array di Luar Batas Bahasa C
Ilustrasi Array di Luar Scope Bahasa C

Sebelum memahami lebih dalam materi tentang Mengakses Array di Luar Batas Bahasa C, terlebih dahulu pelajari materi tentang: Notasi Shorthand Array Bahasa C dan Fungsinya [klik], Variabel Length Array Bahasa C dan Fungsinya [klik], dan Tipe Data Terlarang Untuk Array Bahasa C [klik].

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.

Baca Juga:

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.

Artikel ini didedikasikan kepada: Ericsson Dhimas Niagara, Fanca Bungsu Paranta, Gumilang Rizki Dwi Pratama, Heydita Ratu Dewinta Sari, dan Kiasatina Tri Putri Cahaya Sari.

5 komentar untuk "Mengakses Array di Luar Batas Bahasa C"

  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

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -