![](/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.