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

Program crashing when accessing a specific struct member

本文关键字:程序 崩溃 成员 结构 访问      更新时间:2023-10-16

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

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;
}

问题就在这里:

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保持未初始化状态。