簡體   English   中英

分段錯誤或可疑的指針到指針轉換(面積太小)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM