оператор c ++ * выдает ошибку «нарушение прав чтения» - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать структуру Vector3, но каждый раз, когда я использую оператор *, кажется, возникает исключение «нарушение прав чтения». Я новичок в C ++ и понятия не имею, что является причиной этого. VS 2017, Debug, x86

Код

    float x, y, z;

    Vec3 operator+(Vec3 d) {
        return { x + d.x, y + d.y, z + d.z };
    }
    Vec3 operator-(Vec3 d) {
        return { x - d.x, y - d.y, z - d.z };
    }
    Vec3 operator*(float d) {
        return { x * d, y * d, z * d }; // throwing an exception
        /*
        Unhandled exception thrown: read access violation.
        this was 0x302C.*/
    }

    void Normalize() {
        while (y < -180) {
            y += 360;
        };
        while (y > 180) {
            y -= 360;
        };
        if (x > 89) {
            x = 89;
        };
        if (x < -89) {
            x = -89;
        };
    }
};
// example code
uintptr_t c= *(uintptr_t*)(ModuleHandle+ 0x2);
Vec3* b= (Vec3*)(c+ 0x1); 
Vec3 a= *b* 2;

1 Ответ

0 голосов
/ 12 марта 2020

У вас есть звездочка раньше b:

Vec3 a= *b* 2;

Изменить в отношении отредактированного вопроса, другая строка кода выше, кажется, проблема сейчас:

Vec3* b= (Vec3*)(c+ 0x1); 

Если c не является массивом как минимум из 2 правильно инициализированных Vec3 экземпляров, разыменование, которое вызовет нарушение прав доступа, которое вы видите.

И я имею в виду буквально типа Vec3* или Vec3[], а не char* или что-то в этом роде. Поскольку вы добавляете к нему единицу, тип массива должен соответствовать типу отдельного элемента, чтобы процессор знал, на сколько вперед переместить указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...