Допустим, у меня есть 2 указателя, указывающих на одну и ту же область памяти. Если я знаю, что это за адрес, как я могу узнать, какие указатели указывают на это местоположение?
int x=5;
int* p1=&x;
int* p2=&x;
Как я могу получить адрес p1 и p2? Можно ли даже сделать это в C / C ++? Если нет, то можно ли найти все указатели и посмотреть, какие из них имеют значение &Икс?
Нет, невозможно «отследить» указатель в C или C ++ (хорошее практическое правило: если у функции большие скрытые затраты производительности, то ее нет в C или C ++)
Что касается второго подхода (прохождения памяти в поисках указателей), это именно то, что некоторые инструменты, такие как Бём сборщик мусора делать. Однако этот процесс не только неэффективен и не переносим, но также может привести к «ложным срабатываниям», поскольку вы не можете определить, является ли байтовый шаблон в памяти реальным указателем или чем-то еще, например, обычным целым числом или частью строки.
В любом случае, вы должны спросить себя, какова реальная проблема, которую вам нужно решить, вместо того, чтобы пытаться взломать сборщик мусора самостоятельно. В зависимости от того, что вы хотите сделать, есть много способов приблизиться к этому в C ++ (RAII, умные указатели и т. Д.)
Других решений пока нет …