

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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【至急】フォトショップの「自...
-
画像解析ソフトImageJでの楕円...
-
adobe illustratorの使用者の情報
-
どういう意味
-
CPUの交換について
-
CapCutで、人の目からビームを...
-
Photoshopのアクションについて...
-
バッチ処理が一枚の写真しか処...
-
クロマキーでエッジに「ちらつ...
-
デューティーファクターについ...
-
フラッシュ(flash)を作成する...
-
win10のbasp21がエラーになる
-
ペイントソフトで外字作成?
-
ctrl+c(copy)を実行するbat構文
-
イラレ10のアクションをapplesc...
-
クラリスインパクトのファイル...
-
ロゴ作成フリーソフトの解説
-
dualCPUについて
-
SSDの見分け方
-
VLCメディアプレイヤーでのコマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【至急】フォトショップの「自...
-
どういう意味
-
Illustrator の効果・ぎざぎざ...
-
CapCutで、人の目からビームを...
-
クラリスインパクトのファイル...
-
ザベストテン風ランキング動画...
-
ctrl+c(copy)を実行するbat構文
-
Adobe Premiereでのコマ落とし
-
画像解析ソフトImageJでの楕円...
-
フォトショップ 今の作業をもう...
-
VLCメディアプレイヤーでのコマ...
-
エッジ
-
photoshopのアクションが消えて...
-
GIMPで"separate.exe" プラグイ...
-
fzdファイルを開く方法
-
photshop7でアクションを途中で...
-
バッチ処理が一枚の写真しか処...
-
クラスエフェクトとはどういう...
-
MMDが重いです。
-
Studio One 3にUTAUは載せられる?
おすすめ情報