Ошибка Valgrind unitialized bytes из-за преобразования битового поля типа в целое число

#c #c 11 #valgrind

#c #c 11 #валгринд #c 11 #valgrind

Вопрос:

 struct A {
    A() : a(0), b_1(0), b_2(0), c(0) {}
    int a=0;
    int b_1: 9;
    int b_2: 23;
    int c=0;
};

void func1(int i, int j, int k) {   //<<<< valgrind error at this line.
}

void func2() {
    int aa = 11;
    int cc = 12;
    A a;
    a.b_2 = -1;
    func1(2, a.b_2, cc );
}
  

В моей программе есть что-то вроде этого. Я получаю ошибку valgrind, как показано ниже:

 ==25167== Uninitialised value was created by a stack allocation
==25167==    at 0x122A00E9: func1(int, int, int)
  

Я подозреваю, что, поскольку a.b_2 это 23 бита, и мы присваиваем ему 32-битное целое число j , это вызывает ошибку неинициализированных байтов?
Может ли это -1 потерять свое значение при присвоении j?
правильно ли это?

Комментарии:

1. Это не полное сообщение об ошибке (оно просто сообщает источник значения, которое используется неинициализированным, а не само использование). Поместите здесь полное сообщение со всей программой, необходимой для воспроизведения.

2. сгенерированный код выдает «полный» int из a.b_2 установки «отсутствующих» битов в 0, поэтому неинициализированный байт отсутствует