4

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"));問題が発生するようです。

4

1 に答える 1

1

このエラーRun-Time Check Failure #2は通常、メモリ内のどこかでエラーが発生したために発生します。提供したサンプルを確認した後、これを変更する必要があります。

log4cplus::PropertyConfigurator config(_T("log.properties"));

これに:

log4cplus::PropertyConfigurator configure(_T("log.properties"));

それでも解決しない場合は、メモリの初期化を調べてください。

于 2014-01-21T06:07:25.667 に答える