this → Artikel Baru – ( Atrikel Lama ↓ )

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, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung. :D

Catatan: setiap iklan yang ditayangkan pada blog ini bersumber dari google adsense. Dengan jenis iklan yang dipilih adalah, sebagai berikut.

POIN 1, Iklan yang ditampilkan hanya boleh berbahasa indonesia atau berbahasa inggris. Tidak menerima jenis iklan dalam bahasa yang lain selain yang telah disebutkan karena blog ini dibuat untuk para pengunjung dari negara atau orang yang berbahasa Indonesia.

POIN 2, Setiap gambar yang ditampilkan pada iklan sifatnya tidak mengganggu para pengunjung yang melihat blog, atau tidak boleh menampilkan gambar yang bersifat menjijikkan atau merangsang rasa mual.

POIN 3, Jenis iklan yang dipasang bukan merupakan iklan spam, atau berisi dan mengarahkan pengunjung ke alamat yang berbahaya atau bersifat penipuan.

POIN 4, Segala bentuk iklan tunduk dan patuh pada ketentuan dari pihak Adsense google dan pemilik blog.

POIN 5, Segala jenis iklan yang tidak bertentangan dengan poin 1-4 yang dijelaskan sebelumnya, maka iklan tersebut dapat ditampilkan pada blog.



~ Ikatlah Ilmu dengan Memostingkannya ~

Hot Artikel

Enkapsulasi pada Java

Perbedaan stdio.h dan stdlib.h pada Bahasa C

10 Aturan Utama Penggunaan Overriding pada Java

5 Cara Konversi Tipe Data pada Java

6 Aturan Penting Switch Statement pada Java

Perbedaan Antara int main() dan int main(void) pada Bahasa C

Penjelasan Singkat tentang Konsep Asosiasi, Komposisi, dan Agregasi pada Java