Array indexini aşınca saçma sapan bir değer geliyor

arkadaşlar

int arr[] = {1,2,3,4};
cout << arr[4]; 

dediğim zaman liste den bağımsız bir değer döndürüyor ama neden?

Bunun nedeni, C++'nın sınır denetimi yapmamasıdır. Java ve python gibi dillerde sınır denetimi vardır, bu nedenle sınırların dışında bir öğeye erişmeye çalışırsanız bir hata atarlar. C++ tasarım prensibi, eşdeğer C kodundan daha yavaş olmamasıydı ve C de dizi sınırları kontrolü yapmıyordu.
Bu sınırların ötesinde belleğe erişmeye çalışırsanız, C++ standardında yazıldığı için programınızın davranışı tanımsızdır. Genel olarak, tanımsız davranışlarla karşılaştığınızda, herhangi bir şey olabilir. Uygulama çökebilir, donabilir, iyi çalışabilir (veya en azından iyi çalışıyor gibi görünebilir), diğer uygulamalara müdahale edebilir (gerçekten modern işletim sistemlerinde değil), vb.

Kaynak: https://www.tutorialspoint.com/Why-accessing-an-array-out-of-bounds-does-not-give-any-error-in-Cplusplus

2 Beğeni

Çünkü verdiğiniz index’in liste ile alakası yok, verilen index’te de liste ile alakalı bir değer yok. Kullanılacak indexler dinamik olarak oluşturuluyorsa bir kontrol yapılması lazım.

Hata verilmek yerine değer döndürülmesi sadece dilin tasarımı ile alakalı.

anlamadım ben liste elemanlarına erişmekten bahsediyorum

Nereyi anlamadınız? Listede 4 eleman var, siz 5. elemana erişmeye çalışıyorsunuz.

işte bende onu soruyorum 5. elemana erişmeye çalışınca hata vermeli diye düşünüyor insan bir bakıyorum saçma bir değer döndürüyor bunun sebebini de @toxide açıkladı saolsun :smiley:

C++'da array kullanmayi tercih etmiyoruz; std::vector var. Bounds checking icin [] operatoru yerine at() fonksiyonu kullanilabilir.

4 Beğeni

tamamdır hocam anladım :slight_smile:

“Array kullanmiyoruz” demistim. Cumleyi degistirdim, kusura bakmayin.

array’ler sanirim sadece C uyumlulugu icin var.

2 Beğeni