我有时(随机)得到错误的值初始化,这让我觉得我在某处使用了未初始化的内存。我的主要数据结构是:
template <class state>
class learnedStateData {
public:
learnedStateData() :gCost(DBL_MAX), hCost(0), isDead(false) {}
state theState;
double gCost;
double hCost;
bool isDead;
};
这存储在STL hash_map中。关于如何从这个数据结构中获取未初始化数据(除了theState)的任何想法?
让我澄清一下:我不希望我的价值观未被初始化,但有时它们似乎是随机的。
答案 0 :(得分:4)
你有可能在某处有一个无效的迭代器或指向learnedStateData<T>
的指针吗?
答案 1 :(得分:4)
实施完美无缺......你的问题必须在其他地方。您可以使用像valgrind这样的工具来检查无效的内存访问,未初始化的读取等。您可以添加一些断言来尝试缩小状态被破坏的点。如果提供哈希算法,请确保它为相同的键值一致地返回相同的值。检查您是否在某个对象内部修改对象的密钥。您可以交换std :: map&lt;&gt;并查看问题是否消失。
答案 2 :(得分:3)
您尚未在构造函数
中初始化theState
template <class state>
class learnedStateData {
public:
learnedStateData() :theState(),gCost(DBL_MAX), hCost(), isDead() {}
state theState; ^ ^ ^
double gCost; |_________________________|__________|
double hCost; |
bool isDead; Value Initialized
};