#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, поэтому неинициализированный байт отсутствует