我有以下代码:
#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);
}
每当我在调试器下执行这个应用程序,并且执行过程到达带有注释 push_1 的指令时,执行过程就会停止,我的调试器输出中有以下两个信息:__lhs { s = "test" }
__rhs { s = "error reading variable: Cannot create a lazy string with address 0x0, and a non zero length.}
应用程序退出代码为 0。
但是当我删除 A 类的属性,或者替换为例如 int 属性时,这种奇怪的行为不会发生。为什么会发生?为什么 A 类中的字符串出现会导致此错误?
最佳答案
嗯,你的问题已经一年半了,但今天我确实遇到了同样的问题。相同的代码在一个项目中编译时可以正常工作,而在其他项目中编译时则不起作用。和你一样,我在类声明中声明并初始化了一个字符串变量。我的解决方案是添加一个构造函数并在构造函数中而不是在类声明中初始化变量。我知道这听起来很奇怪,使用 c++ 很多年了,但从现在开始我将始终在构造函数中初始化字符串变量。
关于c++ - 读取变量时出错。无法创建带有地址的惰性字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55032025/