如何回溯指针?

时间:2013-03-07 04:23:36

标签: c++ c pointers memory backtracking

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

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

如何获取p1和p2的地址?是否有可能在C / C ++中做到这一点?如果没有,则可以搜索所有指针并查看哪些指针的值为& x?

1 个答案:

答案 0 :(得分:6)

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

至于第二种方法(通过内存寻找指针),这正是像Boehm garbage collector这样的工具所做的。然而,这个过程不仅是有效的而且不可移植的,但它也可能导致“误报”,因为你无法判断内存中的字节模式是真正的指针还是其他类似普通整数或字符串的一部分。


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