VisualStudio2005 C++ユーザです。
メモリリークの解決の糸口を探しています。
オリジナルDLLでクラスを作成しそれをオリジナルアプリ側で宣言だけして実行、アプリを閉じると「Detected memory leaks!」と表示されます。
アプリもDLLもデフォルト状態での使用のため、何が原因かさっぱりです。
解決の手引きお願い致します。
●作成DLL
・DLLの種類>MFC拡張DLL
・クラスはエクスポートするように記述変更
>class AFX_EXT_CLASS CHogehoge : public CObject
・メンバ関数 InitHogehoge() として「int i=0;」のみ記述
●作成アプリ(MDI形式)
・プロジェクト形式 MFC標準
・共有DLLでMFCを使用に設定
・以下のようにクラスの宣言
>例 void CTestApp::OnAppAbout()内にCHogehoge abc;を宣言
●現象
・アプリを終了させた時に以下が出力される
Detected memory leaks!
Dumping objects ->
d:\実験\f_tool\f_tool.cpp(53) : {65} client block at 0x003B9028, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003B9028, 64 bytes long
a CDynLinkLibrary object at $003B9028, 64 bytes long
{59} client block at 0x003B3298, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003B3298, 64 bytes long
a CDynLinkLibrary object at $003B3298, 64 bytes long
Object dump complete.
F_TOOL.DLL Terminating!
プログラム '[192] Test.exe: ネイティブ' はコード 0 (0x0) で終了しました。
●特記事項
エクスポートしたクラス自体は参照出来ているので基本的なミスはないつもり。
出力の「d:\実験\f_tool\f_tool.cpp(53) : {65} client block at ・・・.」はDLL側の「new CDynLinkLibrary(F_TOOLDLL);」行。
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
new CDynLinkLibrary(F_TOOLDLL);はAfxTermExtensionModule(F_TOOLDLL);によって解放されるのですが、出力を見ればわかりますが、解放より前にリークの検出が行われている為にリークが報告されているだけで、メモリリークしてないと思われます。
ありがとうございます。
なるほど!と思いたいのですが、なぜ「解放より前にリークの検出が行われている」のか知りたい気もします・・・。
しかし理屈抜きでも前へ進みたいため今は「そんなもんなんだ」と覚えておきます。
No.1
- 回答日時:
よくわかりませんが、
new CDynLinkLibrary(F_TOOLDLL);
とCDynLinkLibraryオブジェクトを動的生成してますね。
この生成したオブジェクトをdeleteしていますか?
この回答への補足
早速の回答ありがとうございます。
このオブジェクトをDeleteするようなことはしていません。
このオブジェクトはDLLMain()内にあるのですが、教科書通りとなっており何も手を入れていません。
※教科書=「日経BP プログラミング Visual C++.NET Vol.1 基礎編 第20章」
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// lpReserved を使う場合はここを削除してください
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("F_TOOL.DLL Initializing!\n");
// 拡張 DLL を 1 回だけ初期化します。
if (!AfxInitExtensionModule(F_TOOLDLL, hInstance))
return 0;
new CDynLinkLibrary(F_TOOLDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("F_TOOL.DLL Terminating!\n");
// デストラクタが呼び出される前にライブラリを終了します
AfxTermExtensionModule(F_TOOLDLL);
}
return 1; // OK
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- その他(OS) OBSが起動できません 3 2022/03/30 12:21
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【至急】フォトショップの「自...
-
Illustrator の効果・ぎざぎざ...
-
編集ソフト ダビンチリゾルブに...
-
CapCutで、人の目からビームを...
-
画像解析ソフトImageJでの楕円...
-
ctrl+c(copy)を実行するbat構文
-
マイクロSDカードを差し込んで...
-
画像サイズを正方形にする良い...
-
クラリスインパクトのファイル...
-
WavePad m4a 左右チャンネル合...
-
win10のbasp21がエラーになる
-
Illustrator CS6のバッチ処理
-
メモ帳に書き込めない(泣)
-
ザベストテン風ランキング動画...
-
タスクバーの右クリック禁止
-
Adobe Premiereでのコマ落とし
-
クロマキーでエッジに「ちらつ...
-
テキストエディターを探しています
-
アパレルCADの導入
-
マイクスタンド回し!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【至急】フォトショップの「自...
-
CapCutで、人の目からビームを...
-
ctrl+c(copy)を実行するbat構文
-
Illustrator の効果・ぎざぎざ...
-
どういう意味
-
漫画喫茶のコンピューターにマ...
-
win10のbasp21がエラーになる
-
photshop7でアクションを途中で...
-
画像解析ソフトImageJでの楕円...
-
クラリスインパクトのファイル...
-
1台、1ライセンスとはどういう...
-
NoxPlayerでキーの入力方法が分...
-
ザベストテン風ランキング動画...
-
Windows10でパソコンに元々入っ...
-
Adobe Premiereでのコマ落とし
-
「人と関わる」「人とふれあう...
-
エッジ
-
バッチ処理が一枚の写真しか処...
-
画像サイズを正方形にする良い...
-
VLCメディアプレイヤーでのコマ...
おすすめ情報