isr(nya_mo_nya)
nya_mo_nya****@ybb*****
2003年 9月 12日 (金) 00:19:30 JST
こんにちは。isrです。 xkenさん、平中さん、親切な回答ありがとうございます。 > isrさん、もしかしてPochyと連携するソフトを何か作っておられて、 > Pochyのメインウィンドウを検索する必要性があったりしますか? ごめんなさい。作ってません。m(_ _)m ウィンドウクラス名の採用はズバリ『なんとなくカッコいいから』です!! (すいません) > たぶんペインをFormViewのサイズに合わせるには次のコードでいけそうです。 > 自身が無いので、正しい方法がわかる方がいたら教えてください(^^; 知らない関数だったのでヘルプを見ましたが、 僕も問題無いと思います。 というわけで件名の報告です。 codeprojectで拾ってきたソースでチェック掛けたところ、 メモリリークがありました。 >_< http://www.codeproject.com/tools/leakfinder.asp (次のメールでプロジェクトへの追加手順書きます。 今回の報告メールは結構長いです) 起動して、執筆→何もせずに終了→『保存しますか』と聞かれるので『はい』。 6: \regex.cpp(1912) +7 bytes (_re_compile_pattern) 6: \regex.cpp(5546) +30 bytes (_regcomp) 6: \HeaderInfo.cpp(96) +20 bytes (CHeaderInfo::Analyze) 6: \HeaderInfo.cpp(79) +0 bytes (CHeaderInfo::DoIt) 6: \SummaryView.cpp(730) +0 bytes (CSummaryView::SaveMail) 以下、結構たくさんあるので省略^^; で、 regex_t reg; を使うなら regfree(®) ; をしなきゃいけないようです。 (参考 http://www.sip.eee.yamaguchi-u.ac.jp/kou/regex.html http://216.239.57.104/search?q=cache:bp1HHi_K9vMJ:bama.ua.edu/cgi-bin/man-cgi%3Fregcomp%2B3C++regcomp+regex_t+man+regfree&hl=ja&ie=UTF-8&inlang=ja ) なので、regfree(®)を呼んだら \HeaderInfo.cpp(185) : error C2660: 'regfree' : 関数が不正な 1 個の実引数を ともなって呼び出されました。 と怒られました。 _regex.hをみると extern void regfree _RE_ARGS ((regex_t *preg)); #if __STDC__ #define _RE_ARGS(args) args #else /* not __STDC__ */ #define _RE_ARGS(args) () #endif /* not __STDC__ */ で、よくわからないので、(^^; regfreeの_RE_ARGSとカッコを外したらコンパイルOK。 (ツッコミよろしくです) 以下は regfree(®) ; を追加した関数になります。 一文足しただけでOK (CHeaderInfo::AnalyzeCD) (CHeaderInfo::ReformDate) (CHeaderInfo::Analyze)はちょっと追加、変更 int RegWrap(char *a_pc, const CString a_sField) { int iExecRet; regex_t reg; regcomp(®, a_sField, REG_EXTENDED | REG_NEWLINE | REG_ICASE); iExecRet = regexec(®, a_pc, 0, NULL, 0) ; regfree(®) ; return iExecRet ; } みたいなのをその上にでも置いて if(!RegWrap("^subject:", field)){ m_subject = m_decoded_header[i].Mid(strlen("Subject:")); g_cstr_chop(m_subject); continue; } if(!RegWrap("^cc:", field)){ m_cc = m_decoded_header[i].Mid(strlen("cc:")); g_cstr_chop(m_cc); continue; } if(!RegWrap("^bcc:", field)){ m_bcc = m_decoded_header[i].Mid(strlen("bcc:")); g_cstr_chop(m_bcc); continue; } if(!RegWrap("^from:", field)){ m_from = m_decoded_header[i].Mid(strlen("from:")); g_cstr_chop(m_from); continue; } if(!RegWrap("^to:", field)){ m_to = m_decoded_header[i].Mid(strlen("to:")); g_cstr_chop(m_to); continue; } if(!RegWrap( "^x-mailer:", field)){ m_xmailer = m_decoded_header[i].Mid(strlen("x-mailer:")); g_cstr_chop(m_xmailer); continue; } if(!RegWrap("^reply-to:", field)){ m_replyto = m_decoded_header[i].Mid(strlen("reply-to:")); g_cstr_chop(m_replyto); continue; } if(!RegWrap("^date:", field)){ m_date = ReformDate(m_decoded_header[i]); continue; } if(!RegWrap("^content-transfer-encoding:", field)){ CString cte; m_cte = m_decoded_header[i]; m_cte.TrimRight("\r\n"); cte = m_decoded_header[i].Mid(strlen("Content-Transfer-Encoding:")); g_cstr_chop(cte); if(g_cstr_compare(cte.GetBuffer(0), "7bit")) m_enc = SEVEN_BIT; if(g_cstr_compare(cte.GetBuffer(0), "8bit")) m_enc = EIGHT_BIT; if(g_cstr_compare(cte.GetBuffer(0), "bin")) m_enc = BIN; if(g_cstr_compare(cte.GetBuffer(0), "base64")) m_enc = BASE64; if(g_cstr_compare(cte.GetBuffer(0), "x-gzip64")) // x-gzip64は取りあえず base64にしとく(zlib.dllが必要だそうな) m_enc = BASE64; if(g_cstr_compare(cte.GetBuffer(0), "quoted-printable")) m_enc = QUOTED_PRINTABLE; continue; } if(!RegWrap("^message-id:", field)){ m_msg_id = m_decoded_header[i].Mid(strlen("Message-ID:")); g_cstr_chop(m_msg_id); continue; } if(!RegWrap("^in-reply-to:", field)){ m_in_reply_to = m_decoded_header[i].Mid(strlen("In-Reply-To:")); g_cstr_chop(m_in_reply_to); continue; } if(!RegWrap("^content-type:", field)){ m_ct = m_decoded_header[i]; g_cstr_chop(m_ct); AnalyzeCT(); continue; } if(!RegWrap("^content-disposition:", field)){ m_cd = m_decoded_header[i]; g_cstr_chop(m_cd); AnalyzeCD(); continue; } (CHeaderInfo::AnalyzeCT) // regexec後に全てに追加 regfree(®) ; BOOL g_cstr_compare(LPCTSTR c, LPCTSTR d) int iRet = regexec(®, d, 2, pmatch, 0) ; regfree(®) ; if(0 == iRet) return TRUE; return FALSE; 色々やったので、絶対正しく必要な処理かどうか微妙に迷うところですが、 まあこんな感じということで。^^; 本当はregcompの返り値も見たほうがよさそうですね・・・ とりあえず、見つけたところだけ報告しました。 以上です。 isr****@users*****