2012-04-21 91 views
1

爲什麼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; 
} 

如果我添加一個成員變量來測試並初始化它,沒有輸出。

回答

4

在你的榜樣,大小「一」將是1:

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

sizeof()只報告中的數據一類,但由於每一個獨特的類必須有它自己的地址,添加填充字節。 valgrind抱怨的原因是您正在訪問填充字節,編譯器沒有義務初始化爲任何值。

請參閱here瞭解爲什麼一個類的最小尺寸爲1而不是0的評論。

相關問題