Wild Pointer คือ Pointer ที่ชี้ไปที่หน่วยความจำที่ ไม่ได้จัดสรร (Unallocated) หรือ ถูกปล่อยแล้ว (Deallocated/Freed) ต่างจาก Pointer ปกติที่ชี้ที่อยู่ที่ถูกต้อง
สาเหตุหลัก
- Uninitialized Pointer: ประกาศ Pointer แต่ไม่ได้กำหนดค่าเริ่มต้น
- Dangling Pointer: Pointer ชี้ไปที่ Memory ที่
free()/deleteไปแล้ว - Pointer Overrun: Pointer Arithmetic เกินขอบเขต Array/Object
ตัวอย่าง: Uninitialized Pointer (Wild Pointer แบบคลาสสิก)
#include <iostream>
int main() {
int *ptr; // ประกาศแต่ไม่ Initialize - Wild Pointer!
for(int i = 0; i < 5; i++) {
std::cout << ptr[i] << " "; // Undefined Behavior: อ่าน Random Memory
}
return 0;
}
ผลลัพธ์ (ตัวอย่าง - Non-deterministic)
1 0 -426634956 32764 0
ตัวอย่าง: Dangling Pointer (หลัง Free)
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = malloc(sizeof(int));
*ptr = 42;
free(ptr); // Memory Released
// ptr ตอนนี้คือ Dangling Pointer (Wild Pointer)
printf("%d\n", *ptr); // Undefined Behavior!
return 0;
}
อันตรายของ Wild Pointers
| ปัญหา | ผลกระทบ |
|---|---|
| Read Wild Pointer | Garbage Data, Information Leak (Security) |
| Write Wild Pointer | Memory Corruption, Crash, Security Vulnerability |
| Double Free | Heap Corruption, Crash |