คำอธิบายเพิ่มเติมของคำถามชื่อเรื่องคือตามลำดับ ให้ฉันอธิบายสถานการณ์ของฉัน
ฉันมีรายการคอนเทนเนอร์พอยน์เตอร์ไปยังวัตถุต่างๆ บนฮีป เมื่อใดก็ตามที่วัตถุใหม่ถูกสร้างขึ้น ตัวชี้ไปยังวัตถุนั้นจะถูกเพิ่มเข้าไปในรายการ และเมื่อใดก็ตามที่วัตถุถูกลบ ตัวชี้ของมันจะถูกลบออก พูดได้อย่างปลอดภัยว่าพอยน์เตอร์ทั้งหมดในรายการนี้ถูกต้องเสมอ
วัตถุจำนวนมากในรายการมีตัวชี้ไปยังวัตถุอื่นๆ ในรายการเดียวกัน
ก่อนที่ฉันจะยกเลิกการอ้างอิงตัวชี้ใดๆ เหล่านั้น ฉันต้องการใช้ฟังก์ชัน CheckAgainstList(ptr*)
เพื่อให้แน่ใจว่าวัตถุหนึ่งชี้ไปยังวัตถุอื่นในรายการเดียวกัน ดังนั้นจึงไม่ได้ชี้ไปยังวัตถุที่ถูกลบไปแล้ว
สวมหมวกเหล็กวิลาดตอนนี้ เป็นไปได้ไหม?
- วัตถุ A มีตัวชี้ไปยังวัตถุ B โดยมีที่อยู่หน่วยความจำ
0x00988e50
- วัตถุ B ถูกลบ
- วัตถุ C ถูกสร้างขึ้นและวางลงในพื้นที่หน่วยความจำที่เพิ่งว่าง
0x00988e50
CheckAgainstList(ptr*)
คืนค่าเป็นจริงเมื่อเราตรวจสอบตัวชี้เนื่องจากวัตถุ C อยู่ในรายการและอยู่ในที่อยู่หน่วยความจำเดียวกันกับ B ที่เคยครอบครอง
ตอนนี้เรามีจุดบกพร่องเพราะ A คิดว่ามันมีตัวชี้ไปที่ B แต่ B หายไปแล้ว และ C ก็เข้ามาแทนที่
ข้อผิดพลาดที่อาจเกิดขึ้นนี้เป็นไปได้หรือไม่?