警告:带有lint的可疑指针到指针的转换(区域太小)

时间:2015-05-29 13:14:48

标签: c pointers warnings lint

long keyIntValue;
uint8_t *value; 

*(long *)value = keyIntValue;

我在linting时得到可疑的指针到指针转换(区域太小)。 帮助我理解为什么我得到它以及如何摆脱它?

2 个答案:

答案 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类型的值。你应该更好地了解自己在做什么。

经验法则:不要尝试施放指针,他们可以创建对齐问题。 (如果必须)改为投射