Ошибка байт в Valgrind из-за того, что битовое поле типа приведено к целому числу - PullRequest
0 голосов
/ 22 апреля 2019
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? это правильно?

...