プロが教える店舗&オフィスのセキュリティ対策術

プログラムを実行させた時、下記の様なメッセージが出力されたあとに、特定の場所でエラーが出てしまいます。
色々と試して見たのですが、解決出来ずに困っております。何方かどの辺を調べれば良いか等のアドバイスをお願い致します。

<エラーメッセージ>
"例外処理 (初回) は XXXX.exe (MFC42D.DLL) にあります: 0xC0000005: Access Violation。"

<停止場所>
CWnd* CWnd::GetDlgItem(int nID) const
{
ここです→ASSERT(::IsWindow(m_hWnd));

if (m_pCtrlCont == NULL)
return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));
else
return m_pCtrlCont->GetDlgItem(nID);
}

<エラーが発生するプログラム>
BOOL CComProgramDlg::BinarySend(BYTE SendData[], unsigned long SendLength)
{
intRet;
unsigned longLen;
ここら辺です→CStatic* pStic1 = (CStatic*)GetDlgItem(IDC_MSG_STATIC);

Ret = WriteFile(m_hComm,
&SendData[0],SendLength,&Len,NULL);

if(!Ret) return(FALSE);
if(SendLength > Len)
 return(FALSE);

pStic1 -> SetWindowText("データを送信しました。");

return(TRUE);
}

上記はデータシリアル通信の送信用で10回程度、このメンバ関数を通した時に急に発生します。
よろしくお願いいたします。

A 回答 (2件)

>なぜ数回後にメモリ破壊が発生してしまうのでしょうか?



たまたま。


>何か心辺りや推測,経験談で結構ですので教えて下さい。

単純なところですと、

・領域のサイズ不足。バッファーオーバーフロー。
・delete等で間違ったポインタを渡して関係ない領域を解放。

ですかね。

まぁ、おそらく読み込み用か、それの管理部分の領域不足でしょうね。
    • good
    • 0
この回答へのお礼

ありがとうございました。
今一度、見直してみます。

お礼日時:2005/03/17 15:48

ASSERTで止まる理由:


ウィンドウハンドルが無効

ウィンドウハンドルが無効になる理由:
1.ウィンドウが無い
2.変数の内容が書き換わった。

ですので、ウィンドウが存在しているのでしたらm_hWndの内容が変わっている可能性があります。


>上記はデータシリアル通信の送信用で10回程度、このメンバ関数を通した時に急に発生します。

ここでメモリ破壊してませんか?

この回答への補足

はい。しているみたいです。
デバックモードにて確認してみるとm_hWndの値が評価出来ない状態となってしまっています。
なぜ数回後にメモリ破壊が発生してしまうのでしょうか?
何か心辺りや推測,経験談で結構ですので教えて下さい。

補足日時:2005/03/17 11:43
    • good
    • 0

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