构造函数后对象不存在?

时间:2010-04-03 10:12:34

标签: c++ constructor map object segmentation-fault

我有一个看起来像这样的构造函数(在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)
{

}

我知道制作这样的数据结构可能有更好的方法,但我真的想知道这个段错误问题来自哪里..

1 个答案:

答案 0 :(得分:3)

Interpreter::Interpreter() {
        tempDat == new DataObject(); // <- here
        tempDat->clear();
}

您正在使用==进行分配。请改用=

        tempDat = new DataObject();

使用==为您提供一个表达式,用于将tempDat(某些随机垃圾)的当前值与新创建的DataObject的地址进行比较。该表达式的结果立即被丢弃,tempDat保持不变。所以它仍然包含随机垃圾,在调试会话中恰好是0