3

假设我有 2 个指针指向同一个内存位置。如果我知道它的地址是什么,我怎样才能找出指向该位置的指针?

int x=5;
int* p1=&x;
int* p2=&x;

如何获取 p1 和 p2 的地址?甚至可以在 C/C++ 中做到这一点吗?如果不是,那么是否可以搜索所有指针并查看哪些指针具有 &x 的值?

4

1 回答 1

6

不,不可能在 C 或 C++ 中“回溯”一个指针(一个好的经验法则是,如果一个特性有很大的隐藏性能成本,那么它在 C 或 C++ 中不存在)

至于第二种方法(通过内存寻找指针),这正是像Boehm 垃圾收集器这样的一些工具所做的。但是,此过程不仅效率低下且不可移植,而且还可能导致“误报”,因为您无法判断内存中的字节模式是真实指针还是其他诸如常规整数或字符串的一部分。


无论如何,您应该问自己真正需要解决的问题是什么,而不是尝试自己破解垃圾收集器。根据您想要做的事情,有很多方法可以在 C++ 中处理它(RAII、智能指针等)

于 2013-03-07T04:35:25.643 回答