2011-07-10 12 views
-2

私の悪い英語のための最初の言い訳に。どのようにBSTRのリークメモリのCOMオブジェクトを解決するには?

私はMicrosoft ISA Server 2006 C++プログラミングSDKを使用しています。

isaサーバからBSTR変数を必要とするisa関数によって情報が取得されますが、メモリリークが発生し、::sysFreeString(BSTR)を使用するとメモリリークが解決されません。 どうすればいいですか?デフォルトでは

FPCLib::IFPCLogEntryPtr::get_ClientIP(BSTR *); 
+1

あなたが投稿コード( –

+0

)を投稿すると、SysAllocStringでそれを割り当てたのですか? –

+1

@sam:私たちがあなたを助けるためにコードを投稿しているはずですが、とにかくhttp://msdn.microsoft.com/en-us/library/xda6xzx7(v=vs.71).aspxを見てください。 Hth :) –

答えて

1

、COM BSTR値は時間の経過とともにリークの外観を与えることができ、ランタイムライブラリによってキャッシュされます。あなた自身のコードにはリークがないのに、ヒープサイズはまだ大きくなります。非常に面倒です。

これを原因として排除したい場合は、SetOaNoCache APIを無効にすることができます。

これを実行した後でも明らかなリークが発生した場合は、Process Dumperを使用してそれを追跡し、連続するスナップショットを取得してから再度実行して比較することができます。可能であれば、デバッグビルドに対してこれを実行してください。コールスタックはそのような場合に解読が容易です。

+0

SetOaNoCache API。 Windowsサーバー2003で動作しません – sam

+0

プロセスダンパーを試しましたか? –

関連する問題