Berhati-hati dengan C/C++ array

Array ?, sepertinya mudah, dan mungkin memang mudah. Sekelompok/himpunan type data disimpan dalam area memory sequential , untuk mempermudah pengaturan dan pengaksesan, itulah array. Di C/C++ contoh penggunaannya sebagai berikut :

initialisasi :

int arrayA[3] = {4,5,6}; int arrayB[3]; arrayB[0]=8; arrayB[1]=9; arrayB[2] =10; int* arrayC = new int[3]; arrayC[0] = 11; arrayC[1] = 12; arrayC[2] = 13;

arrayA dan arrayB , arrayC adalah array dari data bertipe integer dan (dimaksudkan) memiliki ukuran maksimum 3. Pengaksesan array dibawah ini sesuai rencana, karena index <=2 .

for(int i=0;i<3;i++) {

   cout<< arrayA[i] << endl;

   cout<< arrayB[i] << endl;

   cout<< arrayC[i] << endl;

}

namun bagaimana jika , diakses sebagai berikut :

for(int i=3;i<10;i++) {

    cout<< arrayA[i] << endl;

   cout<< arrayB[i] << endl;

    cout<< arrayC[i] << endl;

}

index disini >2 , dan yang diharapkan adalah _program crash ._Namun di C/C++, pengaksesan diluar index tidak selalu menyebabkan crash!! (tidak ada exception atau assertion failed ). Ini artinya adalah masalah, karena jika array diakses diluar maksimum index, kesalahan program tersebut tidak akan segera diketahui ( atau bahkan tidak diketahui ) . pengaksesan diluar index akan menyebabkan crash jika suatu saat area memory (yang sebenarnya bukan milik array) tersebut dipakai oleh variabel yang lain. Keadaan seperti ini, adalah salah satu penyebab random crash.

Solusinya, jangan akses diluar index :D . Atau memakai array dari STL misalnya std::vector (dynamic array), atau std::array (constant array ) . Namun yang perlu diketahui lagi , pengaksesan dengan “ [] ” baik di std::vector & std::array sama behaviour-nya dengan plain array diatas : tidak ada pengecekan range. Bedanya saat konfigurasi DEBUG, pengaksesan di luar index akan mendapatkan assertion failed . Pengecekan range saat akses elemen, hanya ada saat mengases dengan .at(index) . Jika diluar range array, akan ada exception failed .Hal ini membantu, namun ada yang harus dibayar : akses dengan array.at(index) lebih lambat jika dibanding akses dengan array[index] .

comments powered by Disqus