Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Array Index Out of Bounds ในภาษา C คืออะไร?


Index Out of Bounds คืออะไร?

สมมติ Array ขนาด 4 ตัว มี Index อยู่ที่ 0 ถึง 3 หากเข้าถึง Index 4 ขึ้นไป** เรียกว่า **Index Out of Bounds**

พฤติกรรมของ C

  • คอมไพเลอร์ **ไม่แจ้ง Error** (Compile ผ่าน)
  • โปรแกรม **Run ได้** (ไม่ Crash ทันที)
  • แต่ **ผลลัพธ์ไม่แน่นอน (Undefined Behavior)** - อาจได้ค่า Garbage, Crash ภายหลัง, หรือทำลายข้อมูลตัวแปรอื่น
  • ต้องระวังมาก** ขณะใช้ Array Index

ตัวอย่างโปรแกรม

#include <stdio.h>
int main() {
    int std[4];  // ขนาด 4: index 0,1,2,3
    int i;
    
    std[0] = 100; // ถูกต้อง
    std[1] = 200; // ถูกต้อง
    std[2] = 300; // ถูกต้อง
    std[3] = 400; // ถูกต้อง
    std[4] = 500; // ❌ OUT OF BOUNDS! (index 4 ไม่มีอยู่)
    
    // พิมพ์ทั้ง 5 ตัว
    for (i = 0; i < 5; i++)
        printf("std[%d]: %d\n", i, std[i]);
    
    return 0;
}

ผลลัพธ์ตัวอย่าง:


std[0]: 100
std[1]: 200
std[2]: 300
std[3]: 400
std[4]: 2314   ← Garbage value (ไม่ใช่ 500 ที่กำหนด!)

อธิบาย

  • Array ขนาด 4 → Index ที่ถูกต้อง: 0, 1, 2, 3
  • กำหนด std[4] = 500 เขียนทับหน่วยความจำที่ไม่ได้จองไว้
  • ตอนพิมพ์ std[4] ได้ค่า 2314 (Garbage) ไม่ใช่ 500
  • อาจทำให้โปรแกรม Crash ภายหลัง หรือทำลายตัวแปรอื่นได้

วิธีป้องกัน

  1. ใช้ Loop condition ให้ถูกต้อง: i < size ไม่ใช่ i <= size
  2. ใช้ assert(index >= 0 && index < size) ในโหมด Debug
  3. เครื่องมือ: Valgrind, AddressSanitizer (-fsanitize=address)
  4. ใช้ std::vector (C++) หรือ Library ที่มี Bounds Checking

ข้อเท็จจริงสำคัญ

C ไม่ทำ Bounds Checking ให้อัตโนมัติ → เป็นความรับผิดชอบของโปรแกรมเมอร์ทั้งหมด