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 回答