传递给库时,std :: string损坏/更改结构

时间:2019-03-01 12:39:06

标签: c++ string visual-studio

我将Visual Studio 2012用于一个项目和一个我出于日志记录目的而使用Log4cxx构建的版本。这两个项目都是在Debug x64中构建的,并且(我相信)可以正确链接。

两个项目的平台工具集均为Visual Studio 2012(v110),运行库为多线程调试DLL(/ MDd),Log4cxx已创建并链接为动态库(.dll)。

请考虑以下内容:

std::string szTestString = "Hello World!";
DOMConfigurator::configure(szTestString); // Call to Log4cxx.dll

在调试时,就在进入该函数之前,这是szTestString的值:

String on my project's side

到目前为止,一切都很好。现在,我进入函数:

void DOMConfigurator::configure(const std::string& filename)
{
    File file(filename);
    DOMConfigurator().doConfigure(file, LogManager::getLoggerRepository());
}

当查看文件名时...

enter image description here

那显然是不对的。

如果我向前走一次,则会出现错误:

  

SampleProject.exe中位于0x000007FEFD6FBDED的未处理的异常:Microsoft C ++异常:内存位置0x000000000030F110的std :: length_error。

什么可能导致std :: string解释的更改?

编辑:当前,我在Log4cxx中添加了一个包装器以使用char *而不是std :: string,它成功了。但是问题仍然存在。

1 个答案:

答案 0 :(得分:0)

当库在“发布”模式下编译并且您尝试在“调试”模式下运行应用程序时,通常会发生此问题。

将两个组件(即DLL和应用程序)保持在相同的模式下(发布或调试)。
确保DLL和应用程序的“代码生成”属性值都相同。