【问题标题】:Valgrind reports uninitialized bytes when using empty classValgrind 在使用空类时报告未初始化的字节
【发布时间】:2012-04-21 17:14:15
【问题描述】:

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

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

【问题讨论】:

    标签: valgrind


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      相关资源
      最近更新 更多