我正在开发一个程序,我有这段代码:
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太大了,程序不尊重数组的空间并覆盖它。
我该如何解决这个问题?
答案 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用所有矢量数组完成它,我需要打印调试来获取信息:我