お世話になっています。
Win2000, VC6.0, MFC, SDIで作成しています。
CMemoryStateというクラスを使ってメモリーリークをチェックしたところ
1 plex.cpp(31)
2 afxtempl.h(1232)
3 map_ss.cpp(74)
4 strcore.cpp(118)でリークをしているようです。
それぞれ何が原因なのかご教授願えませんでしょうか?
よろしくお願いします。
追加質問です。
アウトプットウィンドウに
strcore.cpp(118) : {70} normal block at 0x01xxxx, 50 bytes long.
と出たので、ここをダブルクリックすると、 strcore.cpp ファイルが見つかりません
とメッセージが出ます。
MFCのソースをデバッガ上から見えるようにしたり、ブレークポイントをはったり
するにはどう設定すればよいのでしょうか?
お願いします。m(__)m
VC++をインストールする時、MFCのソースをインストールしたのでしょうか?
そうでなければ、追加インストールしてください。
> strcore.cpp(118) : {70} normal block at 0x01xxxx, 50 bytes long.
こちらでMFCのソースを見ると、CStringがリークしています。
>map_ss.cpp(74)
74: CString *a = new CString(HOGE);
とかやった後に、このa を delete してない、とか。
ボコノン教徒さん お返事ありがとうございます。
>そうでなければ、追加インストールしてください。
>> strcore.cpp(118) : {70} normal block at 0x01xxxx, 50 bytes long.
>こちらでMFCのソースを見ると、CStringがリークしています。
>
>>map_ss.cpp(74)
>74: CString *a = new CString(HOGE);
>とかやった後に、このa を delete してない、とか。
new はいっさい使っていません。
CMapStringToString クラスをAppのメンバに持っています。
SetAt()で追加していったら、何か解放処理が必要なのでしょうか?
リークの心配がないと思って使ってみたのですけれど。。。(T_T;;;
アドバイスお願いします。
> CMapStringToString クラスをAppのメンバに持っています。
> SetAt()で追加していったら、何か解放処理が必要なのでしょうか?
> リークの心配がないと思って使ってみたのですけれど。。。(T_T;;;
Checkpointの間でSetAtを使っていないですか?
リークしていなくても,ヒープの使用状態が変化していますから,
当然,CMemoryStatus::Differenceは「異なっている」と言ってきますよ。
YuOさん お返事ありがとうございます。
>Checkpointの間でSetAtを使っていないですか?
そうなのですか。
気持ち悪かったので、CMapStringToStringを使うのをやめたのですが
あいかわらず
strcore.cpp(118) : {70} normal block at 0x01xxxx, 50 bytes long.
が出てしまいます。
MFCのソースはインストールされているのですが、アウトプットウィンドウに出た
strcore.cpp(118) : {70} normal block at 0x01xxxx, 50 bytes long.
の行をダブルクリックした時に strcore.cppの118行が表示されるようにするには
どうしたらよいのでしょうか?
表示されれば、ブレークポイントを設定してデバッグできると思います。
何か設定が必要なのでしょうか?
よろしくお願いします。
スレッドを強制終了したりしてませんか?
> 表示されれば、ブレークポイントを設定してデバッグできると思います。
> 何か設定が必要なのでしょうか?
strcore.cppを手作業で開けば、ブレークポイントを設定できますよ。
dairygoodsさん お返事ありがとうございます。
>スレッドを強制終了したりしてませんか?
していないと思います。
少なくとも、そういうコーディングはしていません。
>strcore.cppを手作業で開けば、ブレークポイントを設定できますよ。
ファイルを開いて、行を移動してブレークポイントを設定できました。
プログラムの起動から終了まででアウトプットウィンドウに
strcore.cpp(118) : {70} normal block at 0x01xxxx, 50 bytes long.
の行が10回出力されます。
いつも10回であれば、リークはしていないと考えてよいでしょうか?
CStringクラスのコンストラクタとか CString::Format()が実行されても
この行にくるようです。
アドバイスをお願いします。