0

我正在开发一个程序,我有这段代码:

struct Point{
    int x, y, map;
}; // Portal Position

struct HPortal{
    Point startMap, targetMap;
    int MapTitle, PortalType;
}; // Portal Struct

std::vector<HPortal*> Portals[20001]; //Portal Array, total 20001 maps

但它让我在“随机”行动中出错。

我用 VS 调试器看到数组有很多数据。我没有初始化它们(出于测试目的,我在第一张地图中只使用了一个门户)。

稍微搜了一下,觉得var太大了,程序不尊重数组的空间,覆盖掉了。

我该如何解决这个问题?

4

2 回答 2

0

您正在堆栈上创建一个 20001 std::vectors 数组。你知道吗?你确定你不想

std::vector<HPortal*> Portals(20001); // holding x HPortal POINTERS

或者

std::vector<HPortal> Portals(20001);; // holding x HPortals

在第一种情况下,您std::vector<HPortal*>在堆栈上有一个数组,这是一个非常有限的内存,尽管一个很小的测试样本显示它在堆栈上只需要 ~ 240kb 内存。但是,这可能仍然是一个问题,具体取决于堆栈的其余部分。如果您std::vector< std::vector<HPortal*> > Portals(20001);改为使用,您将在堆上创建相同数量的元素(能够容纳更多元素)。

要检查代码的某些部分是否执行任意操作并覆盖程序/内存的其他部分,您提供的代码无法检查。

于 2013-08-13T18:13:07.470 回答
0

我解决了这个问题,删除了 [20001];现在,如果 Portal->startMap.map 与播放器相同,我会查看每个 var。我看到我的 VS 用所有向量数组完成了“损坏”内存,我需要打印调试以获取信息:我

于 2013-08-17T11:47:30.517 回答