Нарушение доступа к классу C ++ - PullRequest
0 голосов
/ 23 октября 2011
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(); выдает ошибку Access Violation?

1 Ответ

0 голосов
/ 26 октября 2011

Вы забыли создать экземпляр своего класса. Вы создали переменную, которая является указателем на класс Register, но не создали ее.

То, что вы получаете - это указатель, который либо равен нулю, либо указывает на какое-то случайное место в памяти, и вы предполагаете, что он указывает на ваш экземпляр класса. Поэтому, когда вы пытаетесь получить доступ к любой из переменных-членов, вы фактически получаете доступ к областям памяти, к которым у вас нет доступа.

Что вам нужно сделать, это создать новый экземпляр класса:

PReg = new Register();

Могу ли я одновременно предложить отодвинуть объявление переменной от прототипа класса (который, как я полагаю, находится в вашем заголовочном файле).

...