gpt4 book ai didi

c++ - 未初始化的字节 Valgrind 投诉 - 无法解释

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:59 31 4
gpt4 key购买 nike

Valgrind 一直提示未初始化的字节,并通过精简寻找一个最小的例子,我最终得到了这个:

#include <valgrind/memcheck.h>

struct dummyObject{
int foo;
bool bar;

dummyObject():foo(1),bar(true) {}
};

int main(){

dummyObject dummy;

VALGRIND_CHECK_VALUE_IS_DEFINED(dummy);

return 0;
}

有两个整数或两个 bool 值,或者一个整数或 bool 值,不会引起任何提示。看起来好像与不同类型的成员一起上课会导致 Valgrind 提示。这不仅仅是因为我明确要求进行检查;在使用类似于 dummyObject 的对象的较大程序中,我收到“条件跳转或移动取决于未初始化的值”错误。

我的编译器是 64 位 linux 上的 g++ 4.7.3,使用调试标志编译并且没有优化 - 或者,它没有区别。

我是否遗漏了什么,或者是误报?

最佳答案

当您检查类型的大小时,您可能会发现该大小与成员大小的总和不匹配。例如,在我的系统上我得到:

sizeof(dummy)=8 sizeof(int)=4 sizeof(bool)=1

打印不同尺寸时。不同之处在于 填充 用于确保对象与系统可以轻松访问的地址对齐。可能是这个未初始化的填充。

关于c++ - 未初始化的字节 Valgrind 投诉 - 无法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18776380/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com