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

标签 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);
}
每当我在调试器下执行这个应用程序,并且执行过程到达带有注释 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/

相关文章:

C++ 继承,发送指向基类的指针

c++ - AMQP-CPP - 基于事件的方法

c++ - 动态内存分配和指针非字符数组类型

c++ - 在第一次向用户显示表单之前,应用程序不会启动

c++ - 从类返回只读二维数组

c++ - 在重载 I/O 运算符中重载增量运算符时出错

C# WinForms 程序,能够为其制作 C++ 插件

c++ - 如何比较 OpenCV 中的标量

c++ - 如何将 LibVLC 中的 D3DDevice 传递为 "HWND"

c++ - 具有绝对路径的 LoadLibrary 返回不正确的 HMODULE,没有错误