タイトルの質問についてさらに説明が必要です。私のシナリオを説明しましょう。
ヒープ上のいくつかのオブジェクトへのポインターのリスト コンテナーがあります。新しいオブジェクトが作成されるたびに、それへのポインターがリストに追加され、オブジェクトが削除されるたびにそのポインターが削除されます。このリストのすべてのポインターは常に有効であると言っても過言ではありません。
リスト上のオブジェクトの多くには、同じリスト上の他のオブジェクトへのポインタが含まれています。
これらのポインターのいずれかを逆参照する前に、CheckAgainstList(ptr*)
関数を使用して、あるオブジェクトが同じリストの別のオブジェクトを指しているため、削除されたオブジェクトを指していないことを確認したいと思います。
アルミ箔の帽子をかぶって、これは可能ですか?
- オブジェクト A には、メモリ アドレス のオブジェクト B へのポインタがあります
0x00988e50
。 - オブジェクト B が削除されます。
- オブジェクト C が作成され、新しく解放されたメモリ空間に配置されます
0x00988e50
。 CheckAgainstList(ptr*)
オブジェクト C がリスト上にあり、B が占有していたのと同じメモリアドレスにあるため、ポインタをチェックすると true を返します。
A は B へのポインターを持っていると考えているため、バグが発生していますが、B はなくなり、いわば C が代わりになっています。
この潜在的なバグは可能ですか?