【发布时间】:2011-08-20 08:12:40
【问题描述】:
我们的代码涉及一个 POD(普通旧数据结构)结构(它是一个基本的 c++ 结构,其中包含其他结构和 POD 变量,需要在开始时进行初始化。)
根据我的read,看来:
myStruct = (MyStruct*)calloc(1, sizeof(MyStruct));
应该将所有值初始化为零,如下所示:
myStruct = new MyStruct();
但是,当以第二种方式初始化结构时,Valgrind 稍后会在使用这些变量时抱怨“条件跳转或移动取决于未初始化的值”。是我的理解有缺陷,还是 Valgrind 抛出了误报?
【问题讨论】:
-
另外,请注意
new MyStruct()不需要在 C++03 中设置任何填充字节。在 C++0x 中是这样。在 C++0x 中,任何填充位都将设置为 0。 -
感谢您的关注,我编辑了我的问题。
-
相关常见问题解答:stackoverflow.com/questions/620137/…
-
据我了解,您不应该收到该错误消息。也许您的数据结构不是 POD?你能把你的代码缩减为仍然展示这种行为的最小程序,然后发布那个提炼的程序吗? (见sscce.org)。
-
什么编译器?你能发布 MyStruct 的定义吗?
标签: c++ struct initialization valgrind calloc