为什么valgrind会在以下代码中报告未初始化的字节?
#include <valgrind/memcheck.h>
class Test {
public:
Test() {}
};
int main(int argc, char* argv[]) {
Test a;
VALGRIND_CHECK_VALUE_IS_DEFINED(a);
return 0;
}
如果我添加一个成员变量来测试并初始化它,则没有输出。
答案 0 :(得分:4)
在您的示例中,“a”的大小为1:
printf("%ld\n",sizeof(a)); => 1
sizeof()
仅报告类中的数据,但由于每个唯一的类必须具有自己的地址,因此会添加填充字节。 valgrind抱怨的原因是你正在访问填充字节,编译器没有义务初始化为任何值。
请参阅here,了解为什么类的最小大小为1而不是0。