Logger :: getInstance导致log4cplus中出现bad_alloc异常

时间:2012-09-01 18:33:11

标签: c++ windows runtime-error log4cplus

我正在尝试使用log4cplus在c ++应用程序中实现日志记录。我能够成功构建/链接(我将log4cplus.lib添加到我的其他库并将log4cplus.dll复制到build / outdir)

当我运行我的应用程序时,我在执行我的Logger :: getInstance调用时遇到以下异常:

LogTesterConsole.exe中0x75cad36f处的未处理异常:Microsoft C ++异常:内存位置为0x0013ed8c的std :: bad_alloc ..

我尝试将调用放在main()例程以及内部,并且具有相同的结果。

有什么想法吗?

代码: -

 #include "stdafx.h"
 #include <log4cplus/logger.h>
 #include <log4cplus/loggingmacros.h>
 #include <log4cplus/configurator.h>
 using namespace log4cplus;
 int _tmain(int argc, _TCHAR* argv[])
 { 
   BasicConfigurator config;
   config.configure();
   Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
   LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
   return 0;
 }

3 个答案:

答案 0 :(得分:1)

如果您正在调试中构建应用程序,请务必链接到lib4CplusD.lib和lib4CplusD.dll。同样,发布应用程序应链接aginst lib4cplus.lib和lib4cplus.dll我有相同的运行时错误,当我将调试应用程序与调试库链接时,问题得到了解决。

答案 1 :(得分:0)

尝试: -

int _tmain(int argc, _TCHAR* argv[])
 { 
   PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));
   Logger root = Logger::getRoot();
   try{
   Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
    }
   catch(...) {
        cout << "Exception..." << endl;
        LOG4CPLUS_FATAL(root, "Exception occured...");
    }
   LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
   return 0;
 }

答案 2 :(得分:0)

我知道这个帖子有点旧,但是当我昨天开始尝试log4cplus v2.0.0时遇到了完全相同的问题。

简短回答:这是一个调试/发布版本问题。

现在为任何人提供更长的答案:

  • 我下载了最新的稳定版log4cplus(v2.0.0)here
  • 我使用VS2017在./log4cplus-2.0.0/msvc14中打开了Visual Studio Soultuin,并制作了log4cplus - Project的版本构建(unicode)(Windows SDK v10.0.16299.0; Platform Toolset v141)。一切都很好。
  • 我制作了一个新的示例C ++ - 试用以前构建的log4cplus的解决方案。
  • 设置使用log4cplus:
    • log4cplusU.lib添加为链接器的附加依赖项
    • log4cplusU.dll添加到输出目录
    • ./log4cplus-2.0.0/include中的所有内容添加到其他包含
  • 制作示例解决方案的调试版本(x86)。一切都很好。
  • 在构建了解决方案后,我点击“运行”以查看是否一切正常。

现在这就是我遇到@Josh在他的帖子中描述的完全相同的问题。现在实际的问题是,我制作了一个log4cplus的发布版本,但在我自己的应用程序的调试版本中使用了这个版本。

有了这个想法,我发布了自己的应用程序版本,一切都像魅力一样!

我将完整的VS2017解决方案推送到我的GitHub-repo,这样您就可以重新解决问题。只需将此解决方案的配置更改为“Debug”(x86)并观察它在运行时产生异常。将其更改为“Release”(x86)并观察它是否像预期的那样工作!