C++矢量+数组,矢量有不存在的数据

C++ Vector + Array, vector have inexistent data

本文关键字:不存在 数据 矢量 数组 C++      更新时间:2023-10-16

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

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

我该如何解决这个问题?

您正在堆栈上创建一个由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);,则会在堆上创建相同数量的元素(能够容纳更多的元素)。

要检查代码的某些部分是否做了任意的事情并覆盖程序/内存的其他部分,您提供的代码无法检查这些部分。

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