1

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

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

4

1 回答 1

4

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

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

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

有关为什么类的最小大小为 1 而不是 0 的评论,请参见此处。

于 2012-04-21T09:14:15.750 回答