【发布时间】:2013-08-13 18:10:00
【问题描述】:
我正在开发一个程序,我有这段代码:
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太大了,程序不尊重数组的空间,覆盖掉了。
我该如何解决这个问题?
【问题讨论】:
-
HPortal对象在哪里创建和销毁? (或者……您确定不想使用vector<shared_ptr<HPortal>>或boost::ptr<vector<HPortal>>或其他有助于管理门户生命周期的东西吗?) -
另外,您确定要将这个巨大的数组放在堆栈上(或在静态或全局中,或在任何地方)吗?例如,您是否可以在堆栈帧退出后使用一个或多个向量(例如,因为您通过引用在某处传递它们)?因为这正是引发“随机”错误的那种事情——可能需要相当长的时间才能覆盖价值 160K 的堆栈,因此崩溃可能比实际问题晚得多……
-
最后,“var太大,程序不尊重数组的空间”在任何现代系统上都是不可能的(那种事情可以一些旧的 DOS 内存模型和类似的内存模型会发生,但我假设您正在处理 32 位或更多)。所以,问题出在你没有向我们展示的一些代码中。很可能这是我上面提到的事情之一,但还有各种其他可能性,包括完全不相关的代码会踩下堆栈或堆,所以如果没有SSCCE,我们就无法进一步调试它,或者至少更多你的代码。
-
@abarnert 你在第一条评论中是不是指的是
boost::ptr_vector<HPortal>? -
@Kos:是的,抱歉打错了。