Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วิธีเข้าถึงตัวแปรโลคัลจากฟังก์ชันอื่นโดยใช้พอยน์เตอร์ C ++


คุณไม่สามารถเข้าถึงตัวแปรในเครื่องได้เมื่ออยู่นอกขอบเขต นี่คือสิ่งที่หมายถึงตัวแปรท้องถิ่น ถึงแม้ว่า ให้เราดูตัวอย่างที่คุณอาจสามารถเข้าถึงหน่วยความจำของตัวแปรภายในเครื่องนอกขอบเขต

ตัวอย่าง

#include<iostream>
int* foo() {
   int x = 3;
   return &x;
}
int main() {
   int* address = foo();
   cout << *address;
   *address = 12;
   cout << *address;
}

ผลลัพธ์

สิ่งนี้อาจให้ผลลัพธ์ -

3
12

ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้รหัสนี้อาจใช้งานได้ เราแค่อ่านและเขียนในหน่วยความจำที่ใช้เป็นที่อยู่ของ x โดยหลักแล้ว คุณอยู่นอกขอบเขตของ foo ที่อยู่จะเป็นตัวชี้ไปยังพื้นที่หน่วยความจำแบบสุ่ม ในตัวอย่างข้างต้น พื้นที่หน่วยความจำนั้นมีอยู่จริงและไม่มีอะไรอื่นกำลังใช้งานอยู่ในขณะนี้ คุณจะไม่ทำลายสิ่งใด ๆ ด้วยการใช้งานต่อไป (คุณจะไม่ใช้พื้นที่หน่วยความจำของกระบวนการอื่นหรือพื้นที่หน่วยความจำที่ไม่ได้รับอนุญาตอื่น ๆ ) และยังไม่มีสิ่งใดเขียนทับมัน ดังนั้น 3 ตัวจึงยังคงอยู่

ในโปรแกรมจริง หน่วยความจำนั้นอาจถูกนำกลับมาใช้ใหม่เกือบจะในทันที และคุณอาจทำบางอย่างเสียหายได้ เช่น การทำเช่นนี้ ข้อบกพร่องในการเข้าถึงหน่วยความจำดังกล่าวนั้นยากต่อการติดตามและกำจัด

เมื่อคุณกลับมาจาก foo โปรแกรมจะบอก OS ว่าหน่วยความจำของ x ไม่ได้ถูกใช้อีกต่อไปแล้ว และสามารถกำหนดใหม่ให้กับอย่างอื่นได้ หากคุณโชคดีและได้รับการมอบหมายใหม่ และระบบปฏิบัติการไม่ตรวจจับว่าคุณใช้มันอีก คุณก็สามารถใช้งานได้