long keyIntValue;
uint8_t *value;
*(long *)value = keyIntValue;
我在linting时得到可疑的指针到指针转换(区域太小)。 帮助我理解为什么我得到它以及如何摆脱它?
答案 0 :(得分:2)
你正在投射一个指向uint8_t"的指针。 (uint8_t *
)到long *
。至于uint8_t只有一个字节(假设8位)可用,对现在long *
的任何赋值都会溢出到后面的字节(一个long
至少有32位= 4个字节)属于指向的对象,从而创建未定义的行为(UB)。
请注意,如图所示,value
在作业时未定义,也表现为UB。
答案 1 :(得分:0)
首先,我们的代码展示了undefined behaviour,因为您正在取消引用统一指针value
。
也就是说,uint8_t
太短来保存long
类型的值。你应该更好地了解自己在做什么。
经验法则:不要尝试施放指针,他们可以创建对齐问题。 (如果必须)改为投射值。