簡體   English   中英

整數緩沖區溢出

[英]Buffer overflow with integers

我有一個非常基本的問題。 假設我有兩個變量(uint16_t a,uint16_t b)並且在 memory 中它們彼此相鄰對齊,例如 a=> 0x0 => 0x15 和 b=> 0x16 到 0x31

讓我們假設 a = 0, b = 65535,

(1) if i increment b(b++), b will become 0 but will it affect 'a' 0th bit?
(2) if i right shift b( b = b << 1), will it affect 'a' ?

謝謝

不,除非你用指針或演員做奇怪的事情。

我會說它不會,因為假設 a 從 0x00 和 a=65535 開始,當你添加一個時,你應該(總是)充其量得到奇怪的行為(或分段錯誤)。 雖然我不是 100% 確定,但我 90% 確定左移不會影響旁邊的 memory。

答案是不。

ab是一個uint16_t ,所以它是一個無符號類型。 並且無符號溢出(或環繞)在 C 中定義明確。它不會改變除此之外的 memory。

不,正確設計的系統不會發生這種情況。 另外,我要指出,按照慣例,您的數字符號是不正確的。 0x 通常用於表示十六進制數字,包括 C 語言,但從您的問題的上下文來看,您無緣無故地將十進制基數作為前綴。 例如,0x31 等於十進制的 49。 並且 16+16 不等於 49。

暫無
暫無

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

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