首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++未初始化内存?

C++未初始化内存?
EN

Stack Overflow用户
提问于 2010-10-01 14:13:21
回答 3查看 5.2K关注 0票数 5

我有时(随机地)得到不正确的值初始化,这让我认为我在某个地方使用未初始化的内存。我的主要数据结构是:

代码语言:javascript
运行
复制
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之外),您有什么想法吗?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-01 15:13:00

实现是非常可靠的.你的问题一定在别的地方。你可以使用valgrind这样的工具来检查无效的内存访问,未初始化的读取等。您可以添加一些断言,以尝试缩小状态损坏的范围。如果您提供哈希算法,请确保它为相同的键值一致地返回相同的值。检查一下,当对象在容器中时,你不会以某种方式修改它的键。您可以换用std::map<>,看看问题是否消失了。

票数 4
EN

Stack Overflow用户

发布于 2010-10-01 14:40:04

有没有可能你在某个地方得到了一个无效的迭代器或指向learnedStateData<T>的指针?

票数 4
EN

Stack Overflow用户

发布于 2010-10-01 14:18:25

您尚未在构造函数内初始化theState

使用Value Initialization

代码语言:javascript
运行
复制
template <class state>
class learnedStateData {
public:
    learnedStateData() :theState(),gCost(DBL_MAX), hCost(), isDead() {}
    state theState;        ^                         ^          ^
    double gCost;          |_________________________|__________|
    double hCost;                            |
    bool isDead;                        Value Initialized
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3836923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档