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

标签 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;

}

最佳答案

问题出在这里:

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

关于c++ - 访问特定结构成员时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199458/

相关文章:

iphone - iOS:如何在 iPhone 上触发用户强制退出崩溃?

c++ - 如何在一个类的不同实例之间共享互斥量?

c++ - char* 和 char[] 没有得到相同的输出

c - 指向结构体中常量字符串的指针

C - 使用结构指针作为参数在函数内分配结构

mono - 仅在MonoTouch 4.0.1中启动事件时,应用程序崩溃

java - 当类依赖不存在时避免崩溃

c++ - 使用强制转换运算符和单参数构造函数重载类的运算符

c++ - 传递可变参数 std::function

go - 在包之间使用相同结构的类型断言