
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;
}
以上、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
AfxEndThreadを使うより そのまま return 0; で終了するようにしたほうが良いでしょう
AfxEndThreadを使ってしまうとCStringのデストラクタが呼ばれないのが原因なのかもしれません
AfxEndThreedをつかうなら
strRecvData.Empty();
AfxEndThread(0);
といった具合にして strRecvDataを明示的に破棄しましょう
::AfxEndThread(0); をコメントにし、正常に終了する事を確認できました。
早々に解決できました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語である関数への同時アクセ...
-
VC++スレッドの正しい終了のさ...
-
マルチスレッドプログラミング...
-
Mutexの次の使い方で
-
別スレッドのデータを受信できない
-
マルチスレッド内のループについて
-
マルチスレッドプログラムでメ...
-
マルチスレッドプログラム
-
.NetのBackgroundWorkerクラス...
-
Macターミナルで実行中のプログ...
-
C# シリアル通信でデータ受信...
-
TCP/IP通信時のサーバーからの受信
-
メモリが不足しています(VBA)
-
VBSの処理中一旦処理を止めて再...
-
UDP通信におけるbind関数について
-
Application.ScreenUpdating=Fa...
-
pccNTmon.exeとntrtscan.exeの違い
-
VBA kernel32 の意味
-
バックグラウンドのプロセスの...
-
VBSで応答不要のメッセージボッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スレッドの監視方法について
-
VC++スレッドの正しい終了のさ...
-
複数スレッドを動作させるのに...
-
スレッドの安全な終了のさせ方
-
WaitForSingleObjectの使い方に...
-
スレッドにて同一メモリの書き...
-
Windows上で、シグナル(SIGTERM...
-
同一スレッドで、ロックをかけ...
-
マルチスレッド内のループについて
-
sleep関数とは?
-
スレッドの終了はどうやるんで...
-
メインスレッドのPostMessageと...
-
CWnd::OnTimerのスレッドの取得
-
C言語である関数への同時アクセ...
-
別スレッドのデータを受信できない
-
VB2005 シリアル通信のClose処理
-
pthreadの使い方
-
ユーザーインターフェイスの一...
-
Linuxでスレッド優先度って変え...
-
win32 スレッドのハンドルついて
おすすめ情報