2016-02-19 121 views
0

我用new動態創建了一個Sensor對象。但是,當我嘗試使用該對象時,它看起來像Sensor的成員未初始化。我已驗證該對象的創建和初始化是否成功。我不認爲這個問題是由於全局對象不是靜態的,而是改變它也不能解決問題。訪問動態創建的對象C++

class SensorModule 
{ 

public: 
    SPI_BUS* spi; 
    ADX123* accel; 
    SENSOR* sensor2; 
    ... 

public: 
    SensorModule(); 
    ~SensorModule(); 
public: 
    sendCommand(); 
    ... 

} 
SensorModule::SensorModule() 
{ 
    spi = new SPI_BUS(1,2,3); 
    accel = new ADX123(spi,4); 
    sensor2 = new SENSOR(spi,5); 

    ...// more initialization 
} 
void SensorModule::sendCommand(void){ 
    accel->accelCommand(); // When I debug and stop here, I see that my "this" 
         // accel pointer are uninitialized 
         // however, the SensorModule object pointer is      
         // valid in the heap 
} 

的main.cpp

SensorModule* pModule = NULL; 
int main(void) 
{ 
    pModule = new SensorModule(); 

    pModule->sendCommand(); 
    ... 
    for(;;) 
    {} 
} 
+2

也許問題出現在'... //更多初始化'中。你爲什麼不用調試器遍歷構造函數。 –

+1

剝離代碼後無法重現:https://ideone.com/I9cr2J – Xirema

回答

0

你的代碼似乎罰款,到目前爲止,儘管你必須非常小心,也呼籲刪除。在C++中,通常應該使用unique_ptr來確保元素已被釋放。

您是否在調試或發佈模式下進行調試?發佈模式有時會混淆一些調試符號。你在構造函數的過程中還是用另一種方法改變加速度?必須有一些東西,因爲accel在這裏肯定是初始化的。你也可以通過構造函數的不同行來檢查它。

+0

沒有什麼好的。 – SergeyA

+2

當然,還有一些需要改進的地方。但是一個未初始化的加速指針並不是來自他發佈的代碼。 – IceFire

+0

*「發佈模式有時會混淆一些調試符號」* - 發佈代碼通常沒有任何調試信息! –