Mengakses Array di Luar Batas Bahasa C
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.
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.
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.
- Berbagai Metode Untuk Melakukan Reversi String pada Bahasa C [klik]
- Mencari Kecocokkan Karakter Menggunakan strpbrk() Bahasa C [klik]
- Membandingkan dua nilai Bahasa C Menggunakan Fungsi STRCOLL [klik]
- Memeriksa Tanda Baca Bahasa C Menggunakan Fungsi ISPUNCT [klik]
- Memeriksa Panjang Nilai Bahasa C Menggunakan Fungsi STRSPN [klik]
- Memeriksa Karakter Alfabet dan Angka Bahasa C Menggunakan ISALPHA dan ISDIGIT [klik]
- Tipe Data Label Menggunakan Statement Switch Bahasa C [klik]
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.
BalasHapusBisa jadi, hanya mastah2 yang tahu apakah program bahasa c ini yang benar atau tidak. :D
HapusApaka beberapa kode program dapat bekerja diluar batas kode program bahasa C?
BalasHapusIya, Beberapa kode program pada bahasa c dapat bekerja diluar batas tanpa terjadi segmetation fault.
HapusNtahlah,
Hapus