
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で質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- ノートパソコン Windows11搭載パソコン 新規購入にあたって 4 2022/11/09 18:11
- Windows Vista・XP やっぱり現代のPCにWindowsXPを入れるのは無理なのでしょうか? 4 2022/08/03 09:58
- その他(ソフトウェア) 特定のpremiere proのファイルが開けなくなりました。 1 2022/11/16 12:31
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別スレッドのデータを受信できない
-
WaitForSingleObjectの使い方に...
-
excelvbaでCreateThreadの動作
-
CWnd::OnTimerのスレッドの取得
-
スレッドの終了の仕方
-
VC++スレッドの正しい終了のさ...
-
DirectX 11のConsntanBuffer
-
スレッドにて同一メモリの書き...
-
C# スレッド終了の監視について
-
C#でスレッド実行中のイベント...
-
マルチスレッドのスレッド数を...
-
VB2005 シリアル通信のClose処理
-
Windows上で、シグナル(SIGTERM...
-
クラスでスレッド作成
-
複数スレッドを動作させるのに...
-
.netアプリへのSendMessageでフ...
-
マルチスレッドプログラミング...
-
ユーザーインターフェイスの一...
-
マルチスレッドでブレイクポイ...
-
スレッドの監視方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スレッドの監視方法について
-
VC++スレッドの正しい終了のさ...
-
スレッドの終了の仕方
-
WaitForSingleObjectの使い方に...
-
Windows上で、シグナル(SIGTERM...
-
別スレッドのデータを受信できない
-
スレッドの安全な終了のさせ方
-
スレッドにて同一メモリの書き...
-
別スレッドからメインダイアロ...
-
マルチスレッドのスレッド数を...
-
C# スレッド終了の監視について
-
MFC通信プログラムマルチスレッ...
-
Linuxでスレッド優先度って変え...
-
メインダイアログが最背面に表...
-
スレッドの終了はどうやるんで...
-
CWnd::OnTimerのスレッドの取得
-
C# スレッドから親ウィンドウへ...
-
メインスレッドのPostMessageと...
-
msec単位のWait Timerが作れない!
-
.NetのBackgroundWorkerクラス...
おすすめ情報