未処理の例外:0xC0000005:0xfeeefeeeの場合のアクセス違反の読み取り場所



Unhandled Exception 0xc0000005



エラー内容:

COMMConsoleServer.exe in 0x1004a498 (COMMUtil.dll) at unhandled exception: 0xC0000005: Access Violation Occurs When reading position 0xfeeefeee

エラー分析:

このエラーは通常、アクセスメモリが原因でアクセスする必要があるために発生します。リリースプロセスのヒープメモリスペースでは、関数HeapFreeは0xfeeefeeeで続行されます
メモリマーク。メモリがアイドル状態であること、つまり、実際にはメモリポインタを介してアクセスできることを示します。エラーについて。

問題の原因:

次のコードでは、



int _tmain(int argc, _TCHAR* argv[]) _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG これらの問題が発生することもありますが、Sleep(1000)ステートメントが上がると、そのような問題は発生しません。次に、ブレークポイント開始関数であるトラッキングを追加しました。問題が見つかりました。
開始機能は次のとおりです。
void Thread::start() { m_hThread = ::CreateThread(NULL, 0, _thd_start, this, 0, & m_threadId) // thread runs immediately after creation } extern unsigned long _stdcall _thd_start (void * param) // thread function definitions have fixed rules { return (long)((Thread*)param)->run() }

エラー分析:

関数をスリープしない場合、手順DEBUGに従って、このような状況が発生します。pSrvThreadを削除した後、スレッド開始関数startに入ります。問題、パラメータの開始関数がこのポインタを渡しましたが、このスペースへのポインタが削除後に解放されたため、これは無効なポインタであり、エラー時に関数を実行するためのオブジェクトを呼び出します。


複製:https://my.oschina.net/myspaceNUAA/blog/60087