我有一个无符号整数(例如32位),当我将其分配给一个有符号整数时,转换后是否可以在有符号整数中保留未初始化的位。
unsigned int i = 10
int j = i;
我从valgrind得到一个错误,说在
处观察到未初始化的字节int func(long,int,int);
我看到在第三个参数中将一个无符号的int传递给此函数。我怀疑这种无符号转换会导致此valgrind错误
答案 0 :(得分:3)
分配变量时,是在右侧分配值,而不是在右侧分配对象表示形式。因此,在将变量分配给之后,永远不会有未初始化的位(或字节)。
此外,因为字节是最小可寻址单元,所以不能将值仅分配给字节中的某些位。是全有还是全无。
仅可以通过Unoptimized model
------
Accuracy score on testing data: 0.8419
F-score on testing data: 0.6832
Optimized Model
------
Final accuracy score on the testing data: 0.8418
Final F-score on the testing data: 0.6828
或char *
来分配变量的特定字节。例如:
memcpy
假设unsigned char c[] = { 1, 2 };
int j;
memcpy(&j, c, sizeof(c));
是4个字节,则仅写入int
的前2个字节,而后2个未初始化。