![](/img/trans.png)
[英]Warning: Suspicious pointer-to-pointer conversion (area too small) with lint
[英]Segmentation fault or Suspicious pointer-to-pointer conversion (area too small)
long keyIntValue;
uint8_t *value;
sscanf(buffer, " %*[^\"\n]\"%9[^;\"\n]", keyStringValue);
keyIntValue = strtol(keyStringValue, NULL, 16);
*value = *(uint8_t*)keyIntValue;
printf("The value is 0x%x \n", *value);
我在GCC編譯器中遇到了以上代碼的分段錯誤
*(long *)value = keyIntValue;
printf("The value is 0x%x \n", *(long *)value);
上面的代碼與gcc一起使用並獲得正確的輸出,但是我使用bitbake編譯器得到了可疑的指針到指針的轉換(面積太小)
如何解決呢?
*value = *(uint8_t*)keyIntValue;
取消引用未初始化的指針會導致未定義的行為,從而導致分段錯誤。
如果keyIntValue
的一部分視為uint8_t
,則可以通過采用keyIntValue
的地址來keyIntValue
,如下所示:
unsigned char *value;
value = (unsigned char*)(&keyIntValue);
printf("The value is 0x%x \n", *value);
注意:之所以將value
的類型更改為指向unsigned char
的指針,是為了避免違反嚴格的別名規則。 允許將字符類型的指針用作任何別名,因此更改類型可以解決別名問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.