C ++ Vector + Array,vector有不存在的数据

时间:2013-08-13 18:10:01

标签: c++ arrays vector

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

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太大了,程序不尊重数组的空间并覆盖它。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

我解决了这个删除[20001];现在我查看每个var,如果Portal-&gt; startMap.map与播放器相同。而“腐败”的记忆我看到我的VS用所有矢量数组完成它,我需要打印调试来获取信息:我