2016-02-19 1 views
0

J'ai dynamiquement créé un objet Sensor avec new. Toutefois, lorsque j'essaie d'utiliser l'objet, il semble que les membres du capteur ne sont pas initialisés. J'ai vérifié que la création et l'initialisation de l'objet sont réussies. Je ne crois pas que ce problème est dû au fait que l'objet global n'est pas statique mais que le changer ne résout pas non plus le problème.Accès à un objet créé dynamiquement 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

Peut-être que le problème est dans '... // plus d'initialisation'. Pourquoi ne pas passer par le constructeur avec le débogueur. –

+1

Impossible de reproduire après avoir effacé le code: https://ideone.com/I9cr2J – Xirema

Répondre

0

votre code semble bien jusqu'à présent, bien que vous devez être très prudent d'appeler également supprimer. En C++, vous devez généralement utiliser unique_ptr pour vous assurer que les éléments sont désalloués.

Déboguez-vous en mode de débogage ou de libération? Le mode de libération désactive parfois certains symboles de débogage. Changez-vous d'accélération au cours du constructeur ou avec une autre méthode? Il doit y avoir quelque chose parce qu'accel est définitivement initialisé ici. Vous pouvez également parcourir les différentes lignes de votre constructeur pour vérifier cela.

+0

Rien ne va bien ici. – SergeyA

+2

Bien sûr, il y a des choses à améliorer. Mais un pointeur d'accel qui n'est pas initialisé n'est rien qui vienne du code qu'il a posté. – IceFire

+0

* "Le mode de lancement désactive parfois certains symboles de débogage" * - le code de version ne contient (habituellement) aucune information de débogage! –