我有以下代码:
#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++,但从现在开始我将始终在构造函数中初始化字符串变量。
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |