Valgrind在使用空类时报告未初始化的字节

时间:2012-04-21 07:01:14

标签: valgrind

为什么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;
}

如果我添加一个成员变量来测试并初始化它,则没有输出。

1 个答案:

答案 0 :(得分:4)

在您的示例中,“a”的大小为1:

printf("%ld\n",sizeof(a)); => 1

sizeof()仅报告类中的数据,但由于每个唯一的类必须具有自己的地址,因此会添加填充字节。 valgrind抱怨的原因是你正在访问填充字节,编译器没有义务初始化为任何值。

请参阅here,了解为什么类的最小大小为1而不是0。