2016-10-23 7 views
-1

Peu importe ce que je fais, je peux sembler accéder à x même s'il est implémenté presque de la même manière que y. Je ne suis pas sûr Si c'est une sorte de problème d'accès à la mémoire. Le programme se casse au premier accès de x sans erreurs ou avertissements de compilation. L'appel dans la CPU fonctionne correctement si x n'est pas présent. Toute aide est merveilleuse.Le blocage du programme lors de l'accès à un membre struct spécifique

ESys.h

#pragma once 

namespace ESYS 
{ 
    struct InterconnectI 
    { 
     int y; 
     std::vector<uint8_t>& Ip; 
     std::vector<uint8_t>& Ir; 

     InterconnectI(std::vector<uint8_t>& p, std::vector<uint8_t>& r); 
     ~InterconnectI(){}; 
     void hi(int n); 

    }; 

    struct CPUI 
    { 
     int x; 

     CPUI(); 
     ~CPUI(){}; 
     void step(InterconnectI* i); 

    }; 

    struct SystemI 
    { 
     CPUI* CPU; 
     InterconnectI* Interconnect; 

     SystemI(std::vector<uint8_t>& p, std::vector<uint8_t>& r); 
     void Step(); 
    }; 
} 

ESys.cpp

#include "stdafx.h" 
#include "ESys.h" 

namespace ESYS 
{ 

    InterconnectI::InterconnectI(std::vector<uint8_t>& p, std::vector<uint8_t>& r) : Ip(p), Ir(r) 
    { 
     y = 0; 
    } 

    void InterconnectI::hi(int n) 
    { 
     std::cout << "Interconnect " << n << std::endl; 
    } 

    CPUI::CPUI() 
    { 
     x = 5; 
    } 

    void CPUI::step(InterconnectI* i) 
    { 
     std::cout << "Step CPU -> " x; //Accessing doesn't work... 
     i->hi(x);      //Passing doesn't work... 
    } 

    SystemI::SystemI(std::vector<uint8_t>& p, std::vector<uint8_t>& r) 
    { 
     CPUI* CPU = new CPUI(); 
     InterconnectI* Interconnect = new InterconnectI(p, r); 
    } 

    void SystemI::Step() 
    { 
     CPU->step(Interconnect); 
    } 
} 

Main.cpp

#include "stdafx.h" 
#include "ESys.h" 

std::vector<uint8_t> pDat; 
std::vector<uint8_t> rDat; 

int main(int argc, const char *argv[]) 
{ 

    ESYS::SystemI ESystem(pDat, rDat); 
    ESystem.Interconnect->y = 11; 

    for (;;) 
    { 
     ESystem.Step(); 
    } 
    return 0; 

} 

Répondre

1

Le problème est ici:

SystemI::SystemI(std::vector<uint8_t>& p, std::vector<uint8_t>& r) 
{ 
    CPUI* CPU = new CPUI(); 
    InterconnectI* Interconnect = new InterconnectI(p, r); 
} 

Les résultats de new sont affectés aux variables locales CPU et Interconnect. Les membres de données SystemI::CPU et SystemI::Interconnect restent non initialisés.

+0

Comment puis-je les initialiser? J'ai essayé tout ce que j'ai trouvé sur le sujet mais il me manque quelque chose. –

+1

Vous pouvez simplement supprimer les définitions de variables locales: 'CPU = new CPUI(); Interconnect = nouveau InterconnectI (p, r); Bien, il est préférable d'envisager d'utiliser des pointeurs intelligents – AVK