尝试创建结构对象,在位置0x3FE00000中创建访问冲突写入错误

Attempt to create a structure object creating an Access Violation Writing Error In Location 0x3FE00000

本文关键字:创建 访问冲突 错误 0x3FE00000 结构 对象 位置      更新时间:2023-10-16

我正在学习使用结构和制作基于文本的 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 的最后一行收到以下错误: 在结构.exe中0x57115139 (vcruntime140d.dll) 引发异常: 0xC0000005:访问违规写入位置0x3FE00000。

在C++数组从零到num_elements索引 - 1

所以如果你声明

int myArray[3];

,然后尝试访问:

myArray[3] = 5;

你将获得未定义的行为,这些行为可能表现为访问冲突,具体取决于编译器和调试设置。

在 Visual Studio 中,可以使用异常设置并在调试中运行时检查访问冲突异常,并在引发执行之前停止执行。