std :: string在msvcp90d.dll中完全崩溃

时间:2012-11-14 10:16:14

标签: c++ dll crash std stdstring

该库正在使用std :: string。当某个特定的应用程序与它链接时,在库中执行的字符串操作变得非常严重。

例如字符串赋值运算符'='(附加堆栈跟踪)。

enter image description here

memcpy_s(...)的目的地和大小看起来很乱。

我们不能在本地重新制作它。请指教。

编辑: 代码看起来像这样:

...
#define DEFAULT_VAL "value"
...
class MyClass {
public:
 MyClass(const std::string& s=DEFAULT_VAL)
 {
  _test() = s;
 }
protected:
 inline const std::string& test() const {return m_test;}
 inline std::string& _test() {return m_test;}
private:
 std::string m_test;
};

....
MyClass c;

2 个答案:

答案 0 :(得分:4)

您可能正在使用0初始化std::string(或std::wstring),最有可能通过nullpointer,例如......

#include <string>
using namespace std;

int main()
{
    string s1( 0 );
    string s2 = s1;
}

不要那样做。

没有太多其他方法可以使std::string“崩溃”,所以很有可能就是这样。现在去调试!祝你好运!

答案 1 :(得分:2)

如果您遇到在接口上暴露std::string的DLL,请确保.EXE和.DLL都是使用相同的编译器版本和< em> CRT的相同风格(例如,调试,两者都发布,两者都具有相同的_HAS_ITERATOR_DEBUGGING设置等)。