我们的代码涉及一个 POD(普通旧数据结构)结构(它是一个基本的 c++ 结构,其中包含其他结构和 POD 变量,需要在开始时进行初始化。)
根据我 读过 的内容,似乎:
myStruct = (MyStruct*)calloc(1, sizeof(MyStruct));
应该将所有值初始化为零,如下所示:
myStruct = new MyStruct();
但是,当以第二种方式初始化结构时,Valgrind 后来在使用这些变量时抱怨“条件跳转或移动取决于未初始化的值”。我的理解在这里有缺陷,还是 Valgrind 抛出误报?
原文由 KC3BZU 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 C++ 中,类/结构是相同的(在初始化方面)。
非 POD 结构也可以有一个构造函数,以便它可以初始化成员。
如果您的结构是 POD,那么您可以使用初始化程序。
或者,您可以使用默认构造函数。
我相信 valgrind 在抱怨,因为这就是 C++ 过去的工作方式。 (我不确定何时使用零初始化默认构造升级 C++)。最好的办法是添加一个初始化对象的构造函数(结构是允许的构造函数)。
作为旁注:
很多初学者都尝试重视 init:
快速搜索“Most Vexing Parse”将提供比我更好的解释。