数年前に書いたコードがあります。正常に動作していますが、他の場所にある新しい無関係のコードを使用して最近再構築した後、動作しなくなりました。これはコードです:
//myobject.h
...
inline CMapStringToOb* GetMap(void) {return (m_lpcMap);};
...
上記は次のようにメインアプリからアクセスされます:
//otherclass.cpp
...
CMapStringToOb* lpcMap = static_cast<CMyObject*>(m_lpcBaseClass)->GetMap();
...
私が言ったように、これは長い間機能していましたが、最新のビルドの時点で失敗し始めることが決定されました。これをデバッグしましたが、ポインタが設定されているコードで、メモリアドレスが実際の値に正しく設定されていることがわかります。set関数にステップインし、メモリアドレスを書き留めてから、この関数に移動し、0xfdfdfdfdを取得してから、デバッガーで手動でメモリアドレスを取得することもできました。これにより、コードが機能します。さて、私が読んだことから、0xfdfdfdfdはバイトを保護すること、または「人の土地がない」ことを意味しますが、それが何を意味するのかはよくわかりません。おそらく、それは1つのエラーによるオフも意味しますが、コードが以前に機能していた場合、それがどのように発生する可能性があるのかわかりません。