มาดูตัวอย่างที่อาจทำให้คุณสามารถเข้าถึงหน่วยความจำของตัวแปรท้องถิ่น (local variable) นอกขอบเขตของมันได้
ตัวอย่าง
#include <iostream>
int* foo() {
int x = 3;
return &x;
}
int main() {
int* address = foo();
cout << *address;
*address = 12;
cout << *address;
}
ผลลัพธ์
โค้ดนี้อาจให้ผลลัพธ์ดังนี้ -
3 12
เช่นที่กล่าวไว้ โค้ดนี้ อาจ ทำงานได้ เรากำลังอ่านและเขียนหน่วยความจำที่ เคยเป็นที่อยู่ของ x ใน main คุณอยู่นอกขอบเขตของ foo ตัวชี้ (pointer) นี้ชี้ไปยังพื้นที่หน่วยความจำสุ่ม ในตัวอย่างข้างต้น พื้นที่หน่วยความจำนั้นยังมีอยู่ และไม่มีสิ่งอื่นใช้งานอยู่ในขณะนั้น คุณไม่ได้ทำลายอะไรโดยการใช้งานต่อ (คุณไม่ได้ใช้หน่วยความจำของกระบวนการอื่นหรือพื้นที่หน่วยความจำที่ไม่ได้รับอนุญาต) และยังไม่มีอะไรเขียนทับมัน จึงทำให้ค่า 3 ยังคงอยู่
ในโปรแกรมจริง หน่วยความจำนั้นอาจถูกนำกลับมาใช้ใหม่ทันที และคุณจะทำลายสิ่งต่างๆ โดยการทำอย่างนี้ บั๊กการเข้าถึงหน่วยความจำแบบนี้ยากมากที่จะติดตามและแก้ไข
เมื่อคุณ return จาก foo โปรแกรมจะบอกระบบปฏิบัติการว่าหน่วยความจำของ x ไม่ได้ถูกใช้งานอีกต่อไป และสามารถมอบหมายให้สิ่งอื่นได้ หากคุณโชคดีและมันถูกมอบหมายใหม่ และระบบปฏิบัติการไม่จับได้ว่าคุณใช้งานอีกครั้ง คุณอาจหลุดพ้นไปได้