msvcr110d.dll中出现未处理的异常

Unhandled exception in msvcr110d.dll

本文关键字:未处理 异常 dll msvcr110d      更新时间:2023-10-16

一切似乎都很好,但当我输入I时,它显示

Unhandled exception at 0x64A1EB90 (msvcr110d.dll) in ConsoleGame1.exe: 0xC0000005: Access violation writing location 0xCCCCCCCC.
First-chance exception at 0x64A1EB90 (msvcr110d.dll) in ConsoleGame1.exe: 0xC0000005:     Access violation writing location 0xCCCCCCCC.
Unhandled exception at 0x64A1EB90 (msvcr110d.dll) in ConsoleGame1.exe: 0xC0000005: Access violation writing location 0xCCCCCCCC.
The program '[5088] ConsoleGame1.exe' has exited with code 0 (0x0).

代码:

void Inventory();
struct Item
{
    string itemName;
    string itemDescription;
    int itemNumber;
    bool haveItem;
    void DisplayItem();
};
int main()
{
    char inv;
hint:
    cout << "HINT: To open your inventory  press 'I'.n";
    cin >> inv;
    if (inv=='I') Inventory();
    else goto hint;
    system("pause");
    return 0;
}
void Inventory()
{
    Item Letter =
    {
        Letter.itemName = "Letter",
        Letter.itemDescription = "...",
        Letter.itemNumber = 1,
        Letter.haveItem = true
    };
    Item Wood =
    {
        Wood.itemName = "Wood",
        Wood.itemDescription = "Birch wood.",
        Wood.itemNumber = 2,
        Wood.haveItem = false
    };
    Letter.DisplayItem();
    Wood.DisplayItem();
}

为了解决手头的问题,您将分配给尚未构建的对象:

Item Letter =
{
    Letter.itemName = "Letter",
    Letter.itemDescription = "...",
    Letter.itemNumber = 1,
    Letter.haveItem = true
};

在指定初始化Letter的参数时,您将分配给Letter的成员。那不行。你想要的是:

Item Letter =
{
    "Letter",
    "...",
    1,
    true
};

然而,正如我在评论中所说,代码总体上表明,你最好从基础开始,写一本好书来指导你。例如,您肯定不想使用goto而不是循环。并且Item类可以使用构造函数。