bounds checking (tsz. bounds checkings)
Tegyük fel, hogy van egy tömb:
int arr; // indexelhető: 0, 1, 2, 3, 4
Egy bounds checking mechanizmus ellenőrzi, hogy:
if (i >= 0 && i < 5)
value = arr;
else
error("index out of bounds");
Ha az index kívül esik az engedélyezett tartományon (pl. arr
), akkor a program hibát jelez vagy megszakad ahelyett, hogy hibás memóriát olvasna.
Előny | Magyarázat |
---|---|
✅ Biztonság | Megakadályozza a memóriasértéseket |
✅ Stabilitás | Elkerüli a kiszámíthatatlan hibákat |
✅ Hibakeresés könnyebb | Kiderül, ha rossz indexet használtunk |
Hátrány | Magyarázat |
---|---|
❌ Futásidejű költség | Minden tömbhozzáférésnél ellenőrzés szükséges |
❌ Nincs minden nyelvben | C, C++ alapértelmezetten nem tartalmazza |
❌ Elrejtheti hibák gyökerét | Egyes hibák csak később jelentkeznek (ha nincs bounds checking) |
Nyelv | Bounds checking támogatás |
---|---|
C, C++ | ❌ Nem (fejlesztőnek kell figyelni vagy használnia eszközöket, pl. AddressSanitizer )
|
Java | ✅ Van (ArrayIndexOutOfBoundsException )
|
Python | ✅ Van (IndexError )
|
Rust | ✅ Van (futásidejű vagy biztonságos módban) |
C# | ✅ Van (IndexOutOfRangeException )
|
-fsanitize=address
)std::vector::at()
C++-ban bounds checkinggel jár
std::vector<int> v = {1, 2, 3};
std::cout << v; // nem ellenőrzi (undefined behavior)
std::cout << v.at(5); // kivételt dob: out_of_range
A bounds checking egy programozási technika, amely megakadályozza, hogy egy tömb- vagy listaindex a megengedett határokon kívülre mutasson. Ez kritikus fontosságú a memóriabiztonság, hibakezelés és rendszerstabilitás szempontjából.