int *p;
{
int x = 0;
p = &x;
}
// p is no longer valid
{
int x = 0;
if (&x == p) {
*p = 2; // Is this valid?
}
}
在指针指向的东西被释放后访问指针是未定义的行为,但是如果稍后在同一区域中发生一些分配,并且您明确地将旧指针与指向新事物的指针进行比较,会发生什么?如果我在比较它们之前先转换&x
和p
转换有关系吗?uintptr_t
(我知道不能保证这两个x
变量占据同一个位置。我没有理由这样做,但我可以想象一个算法,你可以将一组指针与一组绝对有效的指针相交指针,删除进程中的无效指针。如果先前无效的指针等于已知的好指针,我很好奇会发生什么。)