2010-04-03 59 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