对标题问题的进一步解释是有序的,让我解释一下我的场景。
我有一个指向堆上几个对象的指针的列表容器。每当创建一个新对象时,就会将指向它的指针添加到列表中,而每当删除一个对象时,它的指针就会被删除。可以肯定地说,此列表上的所有指针始终有效。
列表中的许多对象都包含指向同一列表中其他对象的指针。
在我取消引用这些指针中的任何一个之前,我想使用一个CheckAgainstList(ptr*)
函数来确保一个对象指向同一个列表中的另一个对象,因此没有指向一个已经被删除的对象。
现在戴上你的锡纸帽子,这可能吗?
- 对象 A 有一个指向对象 B 的指针,其内存地址为
0x00988e50
。 - 对象 B 被删除。
- 对象 C 被创建并被放置到新释放的内存空间
0x00988e50
中。 CheckAgainstList(ptr*)
当我们检查指针时返回 true,因为对象 C 在列表中并且与 B 曾经占用的内存地址相同。
现在我们有一个错误,因为 A 认为它有一个指向 B 的指针,但是 B 消失了,可以说是 C 取而代之。
这个潜在的错误甚至可能吗?