我有一个看起来像这样的构造函数(在c ++中):
Interpreter::Interpreter() {
tempDat == new DataObject();
tempDat->clear();
}
dataObject的构造函数绝对没有任何内容,并且明确这样做:
bool DataObject::clear() {
//clear the object
if (current_max_id > 0) {
indexTypeLookup.clear();
intData.clear();
doubleData.clear();
current_max_id = 0;
}
}
这些成员的定义如下:
std::map<int, int> indexTypeLookup;
std::map<int, int> intData;
std::map<int, double> doubleData;
现在奇怪的是我在tempDat-&gt; clear()上遇到了段错误。 gdb说tempDat为null。怎么可能? tempDat的构造函数不能失败,它看起来像这样:
DataObject::DataObject() : current_max_id(0)
{
}
我知道制作这样的数据结构可能有更好的方法,但我真的想知道这个段错误问题来自哪里..
答案 0 :(得分:3)
Interpreter::Interpreter() {
tempDat == new DataObject(); // <- here
tempDat->clear();
}
您正在使用==
进行分配。请改用=
:
tempDat = new DataObject();
使用==
为您提供一个表达式,用于将tempDat
(某些随机垃圾)的当前值与新创建的DataObject
的地址进行比较。该表达式的结果立即被丢弃,tempDat
保持不变。所以它仍然包含随机垃圾,在调试会话中恰好是0
。