log4cplus ライブラリを使用しています。アプリケーションをビルドすると、適切にコンパイルされて実行されます (何もログに記録されないため、適切ではありませんが、それは別の問題です) が、アプリケーションを閉じると、次のエラーが発生します。
Run-Time Check Failure #2 - Stack around the variable 's1' was corrupted.
これが私のコードです。関連する場所にコメントを付けました。
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
////////////////// SET UP CHECKS FOR MEMORY LEAKS ////////////////////
_CrtMemState s1;
_CrtMemCheckpoint(&s1);
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
//////////////////////////////////////////////////////////////////////
log4cplus::PropertyConfigurator config(_T("log.properties")); // <-- this line seems to be responsible for the issue. When I remove it, everything is ok.
_CrtMemDumpAllObjectsSince(&s1); // <-- here program breaks with mentioned error.
return 1;
}
したがって、コメントに書かれてPropertyConfigurator()
いるように、コンストラクターが問題の原因のようです。この場所の他のコードが同じ問題を引き起こすことはありません。
このライブラリが多くの人に使用され、機能する場合、スタックの破損に問題があるのに、何が問題なのだろうかと思います。
ここで何が起こっているのか誰か知っていますか?
編集:
不要なコードをすべて削除し (上記のコードは編集されています)、関連するコードのみを残しました。それでもlog4cplus::PropertyConfigurator config(_T("log.properties"));
問題が発生するようです。