January 18, 2022

C/C++ Unbounded Array Stack

Sebagai seorang programmer ataupun yang pernah atau sedang belajar tentang pemrograman komputer, Anda pasti pernah mendengar tentang konsep arrayArray merupakan salah satu struktur data yang umumnya digunakan untuk menyimpan lebih dari 1 data dalam sebuah variabel. Secara umum, jumlah data yang bisa dimasukkan ke dalam array yaitu sebanyak n buah data sesuai dengan yang telah dideklarasikan oleh sang programmer. Misalkan sang programmer mendeklarasikan array dengan jumlah elemen 3, maka otomatis hanya 3 data saja yang bisa masuk ke dalam array tersebut, umumnya menempati alamat/indeks 0 s.d. 2.

Konsep tersebut tidak akan sesuai dengan kondisi ketika Anda coba praktikkan di bahasa pemrograman C atau C++ (yang sempat saya dan mahasiswa saya coba beberapa waktu silam). Mengapa demikian? Di [1] disebutkan bahwa array di C++ merupakan plain old C array, yaitu sebuah array dasar yang mengikuti standar bahasa C (induk C++). Pada bahasa C, dinyatakan bahwa compiler hampir tidak mungkin untuk melakukan pengecekan batasan array, entah karena pertimbangan robustness atau alasan lainnya. Yang jelas, ketika Anda mengisikan data melebihi batasan jumlah elemen yang sudah Anda deklarasikan, program akan tetap berjalan dengan santai-santai saja tanpa teriakan array stack overflow.

Terus, apakah itu tidak akan menjadikan program memiliki kesempatan untuk menanam bug tanpa sadar? Jawabannya adalah IYA. Ketika kita tidak memahami konsepnya dengan baik, terlebih bagi programmer muda, bisa jadi bug-bug tersebut akan muncul dengan tanpa kita sadari di sana-sini.

Untuk menghindari hal tersebut, bagi Anda programmer C/C++, Anda dapat menambahkan parameter -fstack-protector-all saat melakukan kompilasi terhadap program (asumsi: compiler yang digunakan adalah gcc atau g++) yang memaksa compiler untuk mengecek batasan elemen array.

Ubah proses kompilasi awal (misal):

g++ sourecodenya.cpp -o sourcecodenya.exe

menjadi:

g++ sourecodenya.cpp -o sourcecodenya.exe -fstack-protector-all

Referensi

[1] C++ Accesses an Array out of bounds gives no error, why?

6 thoughts on “C/C++ Unbounded Array Stack

Leave a Reply