读取位置0x00C4702C时发生访问冲突

Access violation reading location 0x00C4702C

本文关键字:访问冲突 位置 0x00C4702C 读取      更新时间:2023-10-16

我的代码有一些问题。

void gMenu_BP()
{
CLS // #define system("cls");
cout << "Ive opened my backpack and saw...nn";
cout << ":NamettQuantityttPricenn";
    for (int i = 0; i < sizeof(Items); i++)
    {
        try{
            if(Items[i].owd==1)
            {
                cout <<i+1<<">"<<Items[i].Name<<"t"<<Items[i].q<<"ttt"<<Items[i].price<<endl;
            }
        }
        catch(exception ex) {
            cout << "error";
        }
    }
    //cout<<"====================================================";
    cout <<"1.Use Itemn2.Remove Itemn3.Back to Journey";
    int volba01;
    cin >> volba01;
}

它的作用是显示所有者id为1的所有对象。所有这些都将被写入控制台。我的问题是:

Unhandled exception at 0x00C3A2CA in Journey.exe: 
0xC0000005: Access violation reading location 0x00C4702C.

它甚至在VC++之外也会崩溃。请注意,我这样做效果很好,但后来我开始在文本渲染方面遇到问题(每80mil一个字符)。然后我禁用了一些与printf()相关的函数;然后这个错误甚至在这里开始出现。它就像一种病毒。在例外情况下,它向我展示了VC++输出.c文件和其他一些系统文件。我不知道该怎么办,转到C#会有点困难。

编辑:好了,现在它工作了。我已将循环标头更改为

  for (int i = 0; i < sizeof(Items)/sizeof(player.Items[0]); i++)

这是一个奇怪的解决方案,但效果很好。

解决方案:

我定义了structItems的最大实例(元素)。

 #define MAX_OBJECTS 20

我的structItems实例:

 ItemData Items[MAX_OBJECTS];

然后将循环标题更改为:

 for (int i = 0; i < MAX_OBJECTS; i++)

是的,非常简单的解决方案,发布一个问题毫无价值。

感谢任何人的帮助。

希望我帮助过有同样问题的人。