C ++未初始化的内存?

时间:2010-10-01 06:13:21

标签: c++

我有时(随机)得到错误的值初始化,这让我觉得我在某处使用了未初始化的内存。我的主要数据结构是:

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)的任何想法?

让我澄清一下:我不希望我的价值观未被初始化,但有时它们似乎是随机的。

3 个答案:

答案 0 :(得分:4)

你有可能在某处有一个无效的迭代器或指向learnedStateData<T>的指针吗?

答案 1 :(得分:4)

实施完美无缺......你的问题必须在其他地方。您可以使用像valgrind这样的工具来检查无效的内存访问,未初始化的读取等。您可以添加一些断言来尝试缩小状态被破坏的点。如果提供哈希算法,请确保它为相同的键值一致地返回相同的值。检查您是否在某个对象内部修改对象的密钥。您可以交换std :: map&lt;&gt;并查看问题是否消失。

答案 2 :(得分:3)

您尚未在构造函数

中初始化theState

使用Value Initialization

template <class state>
class learnedStateData {
public:
    learnedStateData() :theState(),gCost(DBL_MAX), hCost(), isDead() {}
    state theState;        ^                         ^          ^
    double gCost;          |_________________________|__________|
    double hCost;                            |
    bool isDead;                        Value Initialized
};