Nasz kod zawiera strukturę POD (Plain Old Datastructure) (jest to podstawowa struktura c ++, która zawiera inne struktury i zmienne POD, które muszą zostać zainicjowane na początku).
Na podstawie tego, co przeczytałem , wydaje się, że:
myStruct = (MyStruct*)calloc(1, sizeof(MyStruct));
powinien zainicjować wszystkie wartości na zero, tak jak:
myStruct = new MyStruct();
Jednakże, gdy struktura jest inicjalizowana w drugi sposób, Valgrind później narzeka, że „warunkowy skok lub ruch zależy od niezainicjowanych wartości”, gdy te zmienne są używane. Czy moje rozumienie jest tutaj błędne, czy też Valgrind rzuca fałszywe alarmy?
new MyStruct()
nie było wymagane ustawianie żadnych bajtów wypełniających w C ++ 03. W C ++ 0x jest. Wszelkie bity wypełnienia zostaną ustawione na 0 w C ++ 0x.