アプリ版:「スタンプのみでお礼する」機能のリリースについて

VC++を始めて約3ヶ月で、現在、シリアル通信プログラムを作成しています。
通信用のウインドウを生成し、その時に受信用のスレッドを生成しているのですが、その受信スレッド内でCString変数を使う(何か挿入)と、終了時に「Detected memory leaks!」が発生します。
起動中の動作は今のところ問題ないようですが、終了時といえど、エラーが発生するという事は、何かまずい処理としていると思われますので質問させて頂きました。
これは、と思われる方は助言をお願いします。

環境
 Visual C++6.0
 Windows XP Pro SP3

Create時
m_hRxThread = ::AfxBeginThread(RxThreadFunc, (LPVOID)this);

スレッドの宣言
static UINT RxThreadFunc(LPVOID p);

受信スレッド
UINT CRsNetWnd::RxThreadFunc(LPVOID p)
{
CString strRecvData;
char szRxDat[1024];
char szRecvData[1024];
  ・        ・
  ・        ・
pWnd->m_bRxThreadEndFlag = FALSE;
PurgeComm(pWnd->m_hComm, PURGE_RXCLEAR);
while(pWnd->m_bRxThreadEndFlag == FALSE)
{
--- 省略 ---
if((szRxDat[0] == 0x02) && (bReadError == FALSE))
{
ZeroMemory(szRecvData, sizeof(szRecvData));
CopyMemory(szRecvData, &szRxDat[1], (dwWrite - 2));// STX、ETX以外を抜き出す
strRecvData = szRecvData;// ここをコメントにすると、エラーは発生しない!
--- 省略 ---
}

}
PurgeComm(pWnd->m_hComm, PURGE_RXCLEAR);
TRACE0( "受信スレッド終了\n" );
::AfxEndThread(0);
return0;
}

以上、よろしくお願いします。

A 回答 (1件)

AfxEndThreadを使うより そのまま return 0; で終了するようにしたほうが良いでしょう



AfxEndThreadを使ってしまうとCStringのデストラクタが呼ばれないのが原因なのかもしれません

AfxEndThreedをつかうなら
strRecvData.Empty();
AfxEndThread(0);
といった具合にして strRecvDataを明示的に破棄しましょう
    • good
    • 0
この回答へのお礼

::AfxEndThread(0); をコメントにし、正常に終了する事を確認できました。
早々に解決できました。ありがとうございます。

お礼日時:2008/10/22 14:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!