簡體   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