繁体   English   中英

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

[英]Warning: Suspicious pointer-to-pointer conversion (area too small) with lint

long keyIntValue;
uint8_t *value; 

*(long *)value = keyIntValue;

掉毛时,我得到了可疑的指针到指针的转换(面积太小)。 帮助我了解为什么得到它以及如何摆脱它?

您正在将“指向uint8_t的指针”( uint8_t * )转换为long * 对于uint8_t,只有一个字节(假定为8位)可用,对现在long *任何增加都会溢出到以下字节( long至少具有32位= 4字节),这些字节不属于所指向的对象,因此会产生不确定的行为(UB)。

请注意,如图所示, value未定义,也显示为UB。

首先,当您取消引用统一指针value ,我们的代码表现出未定义的行为

也就是说, uint8_t 太短而无法容纳long类型的值。 您最好知道自己在做什么。

经验法则:不要尝试投射指针 ,它们会产生对齐问题。 (如果必须)强制转换

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM