同じメモリ位置を指す 2 つのポインターがあるとします。アドレスがわかっている場合、その場所を指しているポインターをどのように確認できますか?
int x=5;
int* p1=&x;
int* p2=&x;
p1 と p2 のアドレスを取得するにはどうすればよいですか? C/C++でこれを行うことは可能ですか? そうでない場合、すべてのポインターを検索して、どのポインターが &x の値を持っているかを確認できますか?
同じメモリ位置を指す 2 つのポインターがあるとします。アドレスがわかっている場合、その場所を指しているポインターをどのように確認できますか?
int x=5;
int* p1=&x;
int* p2=&x;
p1 と p2 のアドレスを取得するにはどうすればよいですか? C/C++でこれを行うことは可能ですか? そうでない場合、すべてのポインターを検索して、どのポインターが &x の値を持っているかを確認できますか?
いいえ、C または C++ でポインターを「バックトラック」することはできません (経験則として、機能に大きなパフォーマンス コストが隠れている場合、C または C++ には存在しません)。
2 番目のアプローチ (メモリを調べてポインターを探す) については、まさにBoehm ガベージ コレクターのようなツールが行っていることです。ただし、このプロセスは非効率で移植性がないだけでなく、メモリ内のバイトパターンが実際のポインターなのか、通常の整数や文字列の一部なのかがわからないため、「誤検知」につながる可能性もあります。
とにかく、自分でガベージ コレクターをハックしようとするのではなく、解決する必要がある本当の問題は何かを自問する必要があります。やりたいことに応じて、C++ でアプローチする方法はたくさんあります (RAII、スマート ポインターなど)。