0

我的代码有一些问题。

void gMenu_BP()
{
CLS // #define system("cls");
cout << "Ive opened my backpack and saw...\n\n";
cout << ":Name\t\tQuantity\t\tPrice\n\n";

    for (int i = 0; i < sizeof(Items); i++)
    {
        try{
            if(Items[i].owd==1)
            {
                cout <<i+1<<">"<<Items[i].Name<<"\t"<<Items[i].q<<"\t\t\t"<<Items[i].price<<endl;
            }
        }
        catch(exception ex) {
            cout << "error";
        }
    }
    //cout<<"====================================================";
    cout <<"1.Use Item\n2.Remove Item\n3.Back to Journey";
    int volba01;
    cin >> volba01;

}

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

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

即使在 VC++ 之外,它也会崩溃。请注意,我这工作得很好,但后来我开始遇到文本渲染问题(每 80 万个字符)。然后我禁用了一些与 printf() 相关的功能;然后错误甚至在这里开始抛出。像病毒什么的。在异常情况下,它会显示 VC++ output.c 文件和其他一些系统文件。我不知道该怎么做,迁移到 C# 会有点困难。

编辑:好的,现在可以了。我已将 for-loop 标头更改为

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

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

4

1 回答 1

0

解决方案:

我已经定义了最大值。struct Items 的实例(元素)。

 #define MAX_OBJECTS 20

我的结构项目实例:

 ItemData Items[MAX_OBJECTS];

然后将 for-loop 标头更改为:

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

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

感谢任何人的帮助。

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

于 2013-07-29T16:35:46.107 回答