2010-04-03 102 views
0

我有一个构造函数,看起来像这样(在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-> clear()的段错误。 gdb说tempDat为空。这怎么可能? tempDat的构造函数不能失败,它看起来像这样:

DataObject::DataObject() : current_max_id(0) 
{ 

} 

我知道有做这样的数据结构的可能是更好的办法的,但我真的想知道这个内存设计缺陷问题的根源..

回答

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

您正在使用==进行分配。使用=代替:

 tempDat = new DataObject(); 

使用==给你的tempDat电流值(一些随机的垃圾)进行比较,新创建的DataObject的地址的表达式。该表达式的结果立即被丢弃,并且tempDat保持不变。所以它仍然包含随机垃圾,在调试会话中碰巧是0

+0

DOH! (这是多么愚蠢......)谢谢,我看了一小时后没有看到...... – openbas2 2010-04-03 10:27:39