トップ回答者
Direct2Dプログラムでメモリリークが発生します

質問
-
Direct2Dを使用して、文字や直線を描画するプログラムを作成中です。開発環境はVisual Studio community 2017です。プログラムをデバッグ実行すると、Visual Studioの画面右側に「プロセスメモリ」の推移が表示され、17MBくらいから、10秒に1MBくらいずつ「プロセスメモリ」が増えていきます。これっていわゆる「メモリリーク」なのでしょうか。
「メモリリーク」が発生しないようにしたいのですが、ソースプログラムのどこが問題なのかわかりません。
下記にソースプログラムの関連部分を示します。このうち、bool Render( …)から関数SetFont(20, L"MS 明朝")を呼び出すとメモリリークが発生します。SetFont(…)を呼び出さなければ、メモリリークは発生しません。ここまでは調べたのですが、関数SetFont(…)のどこが問題なのかわかりません。
メモリリークの対策についてご教示いただきたく、よろしくお願いします。
当方はまだDirect2D初心者です。
//ウィンドウに追加するデータ
typedef struct WINDOW_DATA
{
ID2D1Factory *d2d1Factory;
ID2D1HwndRenderTarget * renderTarget;
ID2D1SolidColorBrush * brush;
} WindowData;
// Grobal Variables.
HWND window;
IDWriteFactory* pWriteFactory_;
IDWriteTextFormat* pFom = NULL;
WindowData *g_data;
//Direct2D ファクトリを生成
bool CreateFactory() {
HRESULT hr;
hr = DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory),
reinterpret_cast<IUnknown**>(&pWriteFactory_)
);
//失敗時はメッセージBOXを表示
if (!SUCCEEDED(hr))
{
MessageBox(NULL, "DWriteCreateFactory()に失敗", NULL, NULL);
return false;
}
else
return true;
}
// フォント設定サブルーチン
void SetFont(int size, const WCHAR* type) {
pWriteFactory_->CreateTextFormat(
type , // フォント(MS P明朝/MS Pゴシックとか)
NULL, // フォントコレクション(NULL=システムフォント)
DWRITE_FONT_WEIGHT_NORMAL, //太さ
DWRITE_FONT_STYLE_NORMAL, //スタイル(傾き)
DWRITE_FONT_STRETCH_NORMAL, //幅
(float)size , //文字の大きさ
L"ja-jp", //ロケール(地域)/ja-jp/en-us
&pFom
);
}
bool Render(WindowData *data )
{
//---------- 文字の描画 -------------------
//Direct2D ファクトリを生成
if (!CreateFactory())
return false;
SetFont(20, L"MS 明朝");
g_data = data; // グローバル変数に値を設定
//TextWrite( 200, 30, L"Direct2D サインカーブ", _Blue );
pWriteFactory_->Release();
return true;
}
- 編集済み fghck856 2017年3月24日 6:35