0

他の多くのDLLやEXEで使用されているDLLのクラスがあります。他のバイナリにインクルードされているインクルードファイルで定義されたメソッドがいくつかあります(つまり、メソッド本体は.hファイルにあります)。それらの1つは私に適合を与えています: int GetVersion() { return nVersion; }

常にを返し-842150451ますが、デバッガーで実行してクラスメンバー変数を見ると、nVersion100です。

この問題をデバッグする方法について何かアイデアはありますか?私は本当に立ち往生しています。

(注:これは10年間正常に機能しています!しかし、現在、コードをVC6.0からVS2005に移動しており、スムーズではありません...)

4

3 に答える 3

3

16進数の値は、0xCDCDCDCDのように見えます。これは、通常、デバッグビルドでは初期化されていないメモリです。nVersionが初期化されていますか?

于 2009-10-17T04:55:51.340 に答える
1

静的変数を使用した定義されていない初期化順序に関連する同様の問題がありました。

于 2009-10-20T11:48:02.460 に答える
0

したがって、私があなたをフォローすると、次のことと同等のことが行われます。

clas=new MyClass();
// some other code executes

clas->SetVersion(100);
/// some other code executes...
/// one line before, nVersion is fine.
int n=clas->GetVersion(); ///< this is where it all goes wrong

(コメントを投稿したはずですが、コードはフォーマットされません)

また、クラスのポインターが何らかの形で破損していないことを確信していると仮定していますが、読み取り可能/実行可能メモリを指しています。(それは物事をたくさんホースします)

これをデバッグするのに役立つツールについては、Compuware DevPartner メモリ アナライザーなどのメモリ プロファイリング ツールを使用してみてください。他に検討すべきものには、Purify、Insure ++ (私も使用しており、より強力ですが、使いにくいものがあります) が含まれます。

これらのツールは、簡単に作成できるが見つけにくいメモリ エラーをすばやく警告する傾向があります。

于 2009-11-24T05:29:22.317 に答える