2015-05-29 74 views

回答

0

首先,我們的代碼展示了undefined behaviour,因爲您解引用單位化指針value

也就是說,uint8_t太短來保存類型long的值。你應該更好地知道你在做什麼。

經驗法則:不要試圖投指針,他們可以創建對齊問題。 (如果你必須)鑄造取代

+1

你是對的,但沒有一個是指針轉換。 – Olaf

+0

@Olaf,你指的是'指針指針轉換'的意思? –

+0

這就是根據問題由皮棉報告的內容。對於指針到指針的轉換,它會要求一個指針比另一個指針要小(在這裏:接收指針)。對於某些嵌入式系統可能如此。但不適用於數據類型(應該會生成截斷警告/錯誤)。 uin8_t和long都不是指針。 – Olaf

2

您正在將「指向uint8_t的指針」(uint8_t *)投射到long *。至於uint8_t,只有一個字節(假設是8位)可用,對現在的long *的任何分配都會溢出到後面的字節(一個long至少有32位= 4字節),因此不屬於指向的對象,因此創建未定義的行爲(UB)。

請注意,如圖所示,value在分配時未定義,也表現爲UB。