![](/img/trans.png)
[英]Segmentation fault or Suspicious pointer-to-pointer conversion (area too small)
[英]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.