访问特定结构成员时程序崩溃

时间:2016-10-23 04:15:56

标签: c++ struct crash member

无论我做什么,我似乎都可以访问x,即使它实现与y几乎相同。我不确定如果它的某种内存访问问题。该程序在x的第一次访问时中断,没有编译错误或警告。 如果不存在x,则在CPU中调用步骤可以正常工作。任何帮助都很棒。

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;

}

1 个答案:

答案 0 :(得分:1)

问题在于:

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

new的结果会分配给本地变量CPUInterconnect。数据成员SystemI::CPUSystemI::Interconnect仍然未初始化。