【问题标题】:Class Access violation C++类访问冲突 C++
【发布时间】:2011-10-27 01:34:10
【问题描述】:
class Register
{
private:
        DWORD ax,dx,cx,bx; // POH
        DWORD bp,sp;

        DWORD flag, ip;
public:
        //====================================================
        Register()
        {
             ax = 0x0;
             dx = 0x0;
             cx = 0x0;
             bx = 0x0;

            bp = 0x0;
          //memset(&this->sp,0,sizeof(sp));
            sp = 0x0;

            flag = 0x0;
            ip = 0x0;
        }
        //====================================================
        ~Register()
        {
        }
        //====================================================
        void setAx(DWORD d)
        {
         ax=d;
        }
        //====================================================
        DWORD getSp()
        {
          return sp;
        }

}*PReg;

为什么函数getSp(); 会出现访问冲突错误?

【问题讨论】:

  • 问题不在于这段代码,而在于调用方。贴出代码
  • void push(DWORD buf) { DWORD d = PReg->getSp();堆栈[d]=buf; PReg->incSp(); }
  • 它在这里工作,但是当我这样做时: InstList->Lines->Add(PStack->pop()); // InstList - TMemo
  • 您还没有显示PStackPReg->incSp 的代码。

标签: c++builder access-violation


【解决方案1】:

您忘记实例化您的类。您已经创建了一个指向 Register 类的指针的变量,但您还没有实例化它。

您得到的是一个指针,它要么为空,要么指向某个随机内存位置,并且您假设它指向您的类实例。因此,当您尝试访问任何成员变量时,您实际上是在访问您无权访问的内存位置。

你需要做的是创建一个新的类实例:

PReg = new Register();

我是否可以同时建议您将变量声明从类原型中移开(我假设它位于您的头文件中)。

【讨论】:

    猜你喜欢
    • 2018-11-16
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多