Попытка создать объект структуры, создающий ошибку записи нарушения прав доступа в расположении 0x3FE00000 - PullRequest
0 голосов
/ 04 января 2019

Я учусь использовать структуры и создаю текстовую RPG, и я знаю, что элементы должны быть классом в моем коде, так как я использую структуры, и я новичок в c ++ и программировании. Не понимаю, что именно пошло не так с моим кодом, и как это исправить, возникает ошибка, когда я пытаюсь создать объект структуры с именем player. (Я также хотел бы извиниться за мой грязный код, я бездельничаю и буду чистить его, как только получу то, что у меня работает.)

Это моя первая попытка, я не очень старался, потому что не уверен, что именно попробовать.

#include "pch.h"
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

struct item {
    double resistance, attack;
    string name;
};
item none, WoodenBoots, LeatherChestplate, WoodenShield, WoodenClub, WoodenSword;


struct mobs {
    int health, attack;
    double droprate, resistance;
    item drops[3];
};

item GetData(string object);


int main()
{
    none.attack = 0;
    none.resistance = 0;
    none.name = "none";
    WoodenBoots.resistance = .05;
    WoodenBoots.attack = 0;
    WoodenBoots.name = "Wooden Boots";
    LeatherChestplate.resistance = .2;
    LeatherChestplate.attack = 0;
    LeatherChestplate.name = "Leather Chestplate";
    WoodenShield.resistance = .1;
    WoodenShield.attack = 0;
    WoodenShield.name = "Wooden shield";
    WoodenClub.resistance = 0;
    WoodenClub.attack = 1.2;
    WoodenClub.name = "Wooden Club";
    WoodenSword.resistance = .05;
    WoodenSword.attack = 1.5;
    WoodenSword.name = "Wooden Sword";

    mobs goblin;
    goblin.attack = 1;
    goblin.health = 10;
    goblin.droprate = .5;
    goblin.resistance = .1;
    goblin.drops[1] = WoodenClub;
    goblin.drops[2] = WoodenShield;
    goblin.drops[3] = WoodenBoots;

    mobs Alpha_Goblin;
    Alpha_Goblin.attack = 2;
    Alpha_Goblin.health = 15;
    Alpha_Goblin.droprate = .5;
    Alpha_Goblin.resistance = .1;
    Alpha_Goblin.drops[1] = WoodenSword;
    Alpha_Goblin.drops[2] = WoodenShield;
    Alpha_Goblin.drops[3] = LeatherChestplate;

    struct pdata {
        item Playeritem[6];
        item PlayerWeapon;
    }player;

    player.PlayerWeapon = WoodenSword;
    cout << player.PlayerWeapon.name << endl;

    player.PlayerWeapon = GetData("weapon");
    player.Playeritem[0] = GetData("sheild");
    player.Playeritem[1] = GetData("head");
    player.Playeritem[2] = GetData("torso");
    player.Playeritem[3] = GetData("legs");
    player.Playeritem[4] = GetData("feet");
    player.Playeritem[5] = GetData("hands");
    string weapon = player.PlayerWeapon.name;
    cout << weapon << endl;
    system("pause");
}

Я ожидаю, что это создаст структуру и перейдет к определению значений элементов внутри структуры. я получаю следующую ошибку в последней строке структуры pdata: Исключение, выданное в 0x57115139 (vcruntime140d.dll) в Structure.exe: 0xC0000005: Место записи нарушения прав доступа 0x3FE00000.

1 Ответ

0 голосов
/ 04 января 2019

В C ++ массивы индексируются от нуля до num_elements - 1

Так что, если вы объявите

int myArray[3];

, а затем попробуйте получить доступ:

myArray[3] = 5;

Вы получите неопределенное поведение, которое может проявиться как нарушение прав доступа в зависимости от настроек компилятора и отладки.

В Visual Studio вы можете использовать параметры исключений и отмечать исключения нарушений прав доступа во время работы в режиме отладки, а также останавливать выполнение до его выброса.

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