读取变量时出错。无法创建带有地址的惰性字符串

bie*_*000 5 c++

我有以下代码:

#include <string>
#include <vector>

class A {
public:
    std::string s = "test";
};

class B {
public:
    std::vector<A> vec;
};

int main()
{
    std::vector<B> vec;

    A a1 = A();
    A a2 = A();

    B b1 = B();
    b1.vec.push_back(a1);
    b1.vec.push_back(a2);

    vec.push_back(b1); // push_1 
    vec.push_back(b1);
}
Run Code Online (Sandbox Code Playgroud)

每当我在调试器下执行这个应用程序,并且执行过程到达带有注释 push_1 的指令时,执行过程就会停止,我的调试器输出中有以下两个信息:

__lhs { s = "测试" }

__rhs { s = "错误读取变量:无法创建地址为 0x0 且长度非零的惰性字符串。}

应用程序退出代码为 0。

但是当我删除 A 类的属性,或者用 int 属性替换时,这种奇怪的行为不会发生。为什么会发生?为什么 A 类中的字符串出现会导致此错误?

小智 1

好吧,你的问题已经一年半了,但今天我也遇到了同样的问题。相同的代码在一个项目中编译时可以正常工作,但在其他项目中编译时则不起作用。和您一样,我在类声明中声明并初始化了一个字符串变量。我的解决方案是添加一个构造函数并在构造函数中初始化变量,而不是在类声明中。我知道这听起来很奇怪,很多年都使用 c++,但从现在开始我将始终在构造函数中初始化字符串变量。