C++ 在释放模式下未初始化为空的向量
C++ Vector Not Initialized Empty When In Release Mode
这是我在堆栈溢出上发布的更模糊的错误之一,所以如果它看起来有点缺乏信息,我提前道歉。我有一个相当大的项目,它使用静态向量来包含应用程序生命周期的信息。在调试模式下,一切都会顺利进行,但在发布模式下,矢量似乎未初始化。当我逐步完成解决方案时,我可以看到在发布模式下,向量具有随机大小,并且充满了废话,每次我运行应用程序时都会发生变化,这让我相信它们是未初始化的,只是从堆中读取随机信息。对于大规模的项目,显示所有代码并寻求帮助解析整个事情对我来说是困难和不公平的,所以我已经提取了相关信息。这样做的问题是,提取的代码中不会出现相同的错误,就好像构建经历了不同的优化,因此不会产生相同的错误。
一个过长的长话短说,我想知道他们是否是一种我可以强制初始化大小为 0 的向量的方法,这样这样的初始化就不会被优化出来。
如果它有帮助,这里是提取的代码:
#include <vector>
#include <iostream>
using std::getchar;
using std::vector;
class Entity {
public:
short id;
Entity(short i) : id(i) {
}
};
class EntityManager {
static Entity& CreateEntity(vector<Entity> &entities, unsigned short i);
public:
static vector<Entity> dynamicEntities;
static vector<Entity> staticEntities;
static Entity& CreateDynamicEntity();
static Entity& CreateStaticEntity();
};
vector<Entity> EntityManager::dynamicEntities;
vector<Entity> EntityManager::staticEntities;
Entity& EntityManager::CreateEntity(std::vector<Entity> &entities, unsigned short i) {
entities.push_back(Entity((entities.size())));
Entity& entity = entities.back();
return entity;
}
Entity& EntityManager::CreateDynamicEntity() {
return CreateEntity(dynamicEntities, 1);
}
Entity& EntityManager::CreateStaticEntity() {
return CreateEntity(staticEntities, 0);
}
int main() {
Entity& e = EntityManager::CreateDynamicEntity();
std::cout << e.id;
getchar();
return 0;
}
提前感谢您的帮助。
您的问题似乎是由于全局变量的初始化顺序不确定这一事实引起的。
使它们具有确定性的一种方法是用函数包装数据。
而不是使用
vector<Entity> EntityManager::dynamicEntities;
用
vector<Entity>& EntityManager::getDynamicEntities()
{
// This guarantees that entities is initialized properly
// before it is accessed by calling code.
static vector<Entity> entities;
return entities;
}
当然,这意味着将EntityManager
更改为:
class EntityManager {
static Entity& CreateEntity(vector<Entity> &entities, unsigned short i);
public:
static vector<Entity>& getDynamicEntities();
static vector<Entity>& getStaticEntities();
static Entity& CreateDynamicEntity();
static Entity& CreateStaticEntity();
};
相关文章:
- 为什么我在向量初始化时收到此错误?
- 使用向量初始化参数化构造函数的对象数组
- C++向量初始化遗传算法的代理向量
- shared_ptr类的向量的向量初始化问题
- 如何实现使用 gcc-4.4 编译的大向量初始化?
- 使用向量初始化C++中的链表
- C++ 中的向量初始化
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- std::另一个函数中的向量初始化
- 理解向量初始化时出现问题
- 静态常量 std::<char>没有堆的向量初始化?
- 向量初始化在 C++ 类中失败
- 具有从特定范围的随机数初始化特征矩阵或向量初始化特征矩阵或向量的有效方法
- 关于向量初始化的一些问题
- 了解C 中的向量初始化
- 设置::使用数字中的引号进行向量初始化
- VS2010中的向量初始化
- C++:构造函数中的向量初始化
- 如何从向量初始化数组?(如何将指针强制转换为数组?)
- 给我一个向量初始化的提示或(答案)