Home > プログラム > CWinApp::m_pszProfileNameはdeleteじゃなくfreeする

CWinApp::m_pszProfileNameはdeleteじゃなくfreeする

MFCアプリでiniファイルの書き出しがうまくいかない現象に悩んでいました。その現象自体はiniファイルのパスをフルパスで指定することで解決したのですが(Vista以降で起こるUACがらみの挙動が影響しているらしい)、今度はプログラム終了時にヒープが壊れて文句をいわれるようになってしまいました。

MFCアプリでiniファイルのパスを指定するのはCWinAppのm_pszProfileNameに値を設定します。ここでm_pszProfileNameに直接文字列リテラルのポインタを代入していたのがだめな原因でした。C++とすっかりご無沙汰だったせいで結構初歩的なところでボロボロです。悔しいですw

■間違い

m_pszProfileName = _T("d:\\temp\\test.ini");

■正解

if (m_pszProfileName) {
    free((void*)m_pszProfileName);
}
m_pszProfileName = _tcsdup(_T("d:\\temp\\test.ini"));

コメント:0

コメントフォーム
Remember personal info

トラックバック:0

このエントリーのトラックバックURL
http://www.srcw.net/2010/04/11/cwinappm_pszprofilename%e3%81%afdelete%e3%81%98%e3%82%83%e3%81%aa%e3%81%8ffree%e3%81%99%e3%82%8b/trackback/
Listed below are links to weblogs that reference
CWinApp::m_pszProfileNameはdeleteじゃなくfreeする from srcw.net

Home > プログラム > CWinApp::m_pszProfileNameはdeleteじゃなくfreeする

アーカイブ
カレンダー
« 2010 年 4月 »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Return to page top