簡體   English   中英

為什么&x + 1不會導致seg錯誤?

[英]Why won't &x + 1 cause seg fault?

這個線程中 ,它使用&x + 1來確定一些隨機struct x的大小。 我想知道為什么這是一個合法的解決方案? 這會導致分段錯誤嗎?

我的理解是只要&x + 1保留在當前線程可訪問的內存中,它就沒問題,但如果&x + 1以某種方式嘗試訪問超出其允許范圍的內存,則會導致seg錯誤,那對嗎?

第三,C標准明確允許指針指向一個超過數組末尾的指針。

...如果指針操作數和結果都指向同一個數組對象的元素,或者指向數組對象的最后一個元素,則評估不應產生溢出...

正如@alk指出的那樣,在進行指針運算時,指向對象的指針被視為長度為1的數組。

出於這些運算符的目的,指向不是數組元素的對象的指針與指向長度為1的數組的第一個元素的指針的行為相同,其中對象的類型為其元素類型。

(從第6.5.6.8和C99草案6.5.6.7 這里

首先,在C中,所有線程都可以訪問任何線程都可訪問的所有內存。 線程在這里不是問題。

其次,你永遠不會取消引用指針&x + 1 ,所以你無論如何都不會訪問任何內存。

所以你的代碼是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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