【发布时间】:2016-11-29 06:01:36
【问题描述】:
如果您想查看导致此问题的代码,可以在此处查看和克隆项目:https://github.com/NickChapman/RuM/tree/63047e457745558403ea807534e4f5b9930cfeb8
值得注意的是,在我的构造函数内部(RuMParser.cpp 第 20 行):
this->globalScope = Scope();
std::cout << &(this->globalScope) << std::endl;
然后在构造函数完成后立即获得(RuM.cpp 第 63 行):
std::cout << &(this->parser.globalScope) << std::endl;
这些的输出是:
0x7fff57ac5318
0x7fff57ac6988
为什么它们不一样?在剩下的所有时间里,地址将保持固定在第二个值。为什么离开构造函数后会改变?
我在第一次打印后立即尝试建立指针时注意到了这个问题。构造函数完成后,指针指向旧地址,我很困惑为什么。
我怀疑这与复制构造函数或类似的东西有关。
编辑:作为参考,如果您尝试构建源代码并运行,您可以:
cmake .
make
然后
./rum
输入x=1;$会导致程序段错误。
【问题讨论】:
标签: c++ pointers memory-management constructor memory-address