CString のメモリーリーク

VC6の話です。

Dumping objects ->
strcore.cpp(118) : {522} normal block .....

Data: < 007 > 01 00 00 00 03 00 00 00 04 00 00 00
30 30 37 00
Object dump complete.
strcore.cpp(118) というメモリーリークの内容

何度か試して同じ522だったので、theAppのコンストラクタに、
_CrtSetBreakAlloc(522)を挿入しデバッグを行いました。

最初にとまったのは、_heap_alloc_dbgという関数でした。
これではわからないので、呼び出し元をたどります。

コールスタックで上にさかのぼっていくと、
strcore.cppの118行目に次のような記述があります。
pData = (CStringData*) new
BYTE[sizeof(CStringData) + (nLen+1)*sizeof(TCHAR)];

さらにさかのぼると処理は、次のような所に到達しました。
CString& CString::operator=(LPCTSTR lpsz)

この上をたどると、メモリーリークしている所に到達しました。
該当箇所は、ただ単純に CString型 = char*型している所でした。。。


CString型は扱いが厄介に感じます。

そこで、こうすればメモリーリークになるのではと
考えている事を書きたいと思います。
(注)もちろん私の勝手な見解です。根拠はありません。

1.CString型の関数を作った時。
  CString hoge()等、関数の型にした時、発生した覚えがあります。
  [対応]基本的に作らないようにしています。

2.スレッドを利用している時。
  スレッドの終了のタイミングと関連があると感じています。
  [対応]スレッド内のローカル変数や引数で渡したCString型のものは、
   スレッドが終わる前に[変数名].Empty() でクリアします。

3.クラスメソッドや構造体でCString型変数を再設定する時。
  パラメータ設定用メソッドと実行メソッドを別にしたクラスで、
  設定メソッドにCString型の変数を渡していた場合や、
  構造体内のCString型変数に対して、繰り返し設定し使用した場合。
  [対応]設定前に、[変数名].Empty()を行い、再設定します。


基本的にメモリーリークが増えなければ良いという考えもあると思います。
でも、、気持ち悪いので調べて納得して結論を出すべきと思います。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

興味

項目(サイトへ)概要
AIと仕事の未来生成AIによる働き方の変化と、これから求められる仕事・スキル・キャリアを探るレポートです。
SVGタグ解説SVGの基本的なタグについて解説します。
SVGの探求SVG:インタラクティビティとアニメーションの探求
Mermaid.js 各種ダイアグラムのノードと矢印の図形Mermaid.jsは、コードベースでフローチャートやUMLなどの図を描画できる軽量なJavaScriptライブラリです。
Mermaid.js 記述事例Mermaid.jsを使用してフローチャート、シーケンス図、クラス図、ステート図、マインドマップ、要件定義を記述した構文例を載せています。
macromedia Flash 歴史探訪Webに命を吹き込んだFlash──インタラクティブ時代の幕開けを振り返ります。
RailsがWeb開発にもたらした衝撃と改革Web開発の革命、多くのフレームワーク誕生の火付け役となったRuby on Railsについて。
IT開発工数見積もり手法 選定支援ツール要件定義は工数見積の基盤であり、適切な算出が成功の鍵となります。
梅から桜へ:日本の花文化変遷インタラクティブガイド梅から桜へと観賞対象が移り変わった歴史的経緯と文化的背景を、インタラクティブに探求します。
もち麦と雑穀米 完全ガイドもち麦と雑穀米のインタラクティブガイドです。

no+e

記事内容
SVG描画ツールを作ってみたSVG描画ツールをGeminiと共に作るきっかけとなった話
GeminiとMermaid.jsの組み合わせGeminiで、ソースを解析してもらいmermaid.jsが認識してくれるタグに変換してもらう話
Gemini共同製作からのGem活用Geminiと私が実際に行っている共同製作方法(バイブコーディング)の方法を解説した話
SVG描画ツールをGemini CLIで作成するGemini CLIでSVG描画ツールを作成できるのか?を確認した話
KIROを使ってみました。KIROというAIエージェントが公開されてGemini CLI が解決できない問題を解決できるのではと使ってみた話
KIROとGeminiでSVG描画ツールを作成本当はGEMINI CLIを1番に使いたいのですが使えないのです。その為現在は、1.KIRO 2.GEMINI(WEB) 3.GEMINI CLI を使ってます
AIが「ごめんなさい」と答えた日。私は気分転換をすることにしたSVG描画ツールのバグ修正が思うように進まず、開発がしばらく停滞した中、生成AIにも見放されてしまい気分転換をした話