指標的危險

2021-05-22 02:07:36 字數 713 閱讀 4630

指標的危險

下面的**有沒有問題?如果有的話,問題在**?

intarray

[array_size];

int*pi;

for(

pi =

&array[0

];pi 

<

&array

[array_size];)

有兩個錯誤。對增值後的指標進行解引用時,陣列的第乙個元素並沒有被清零。另外,指標在越過陣列的右邊界以後仍然進行解引用,它將把其他某個記憶體位址的內容清零。

注意pi

在陣列之後立即宣告

。如果編譯器恰好把它放在緊跟陣列後面的記憶體位置,結果將是災難性的。當指標移到陣列後面的那個記憶體位置時,那個最後被清零的記憶體位置就是儲存指標的位置。這個指標(現在變成了零)因此仍然小於

&array

[array_size

],所以迴圈將繼續執行。指標在它被解引用之前增值,所以下乙個被破壞的值就是儲存於記憶體位置4

的變數(假定整型的長度為

4個位元組)。如果硬體沒有捕捉到這個錯誤並終止程式,這個迴圈將快樂地繼續下去,指標在記憶體中歡快地前行,破壞它遇見的所有值。當它再一次到達這個陣列的位置時,就會重複上面這個過程,從而導致乙個微妙的無限迴圈。

出處:《c

和指標》。

kenneth a. reek 

著,徐波譯。人民郵電出版社。第

113頁。

指標的危險

long fellow fellow 223323 這樣做是很危險的,因為沒有給fellow賦位址,無法確定fellow所存的是何值,可能是任意值。不管值是什麼,程式都將它解釋為儲存223323的位址。如果fellow的值碰巧為1200,並不是你想要的位址,這中錯誤可能會導致一些最隱匿 最難以跟蹤的...

危險的組合

題意 n個盒子擺放成一排,當有3個以上u擺放在一起的時候,就會有危險,求總共有多少種危險的情況。案例 sample input45 0sample output38 分析 這題思路跟之前發布的不容易事件類似。每放置乙個新的盒子,都對應2種情況 設dp n 當盒子數目為n的情況下,符合要求 出現連續三...

Vista延期的危險

記得中旬的時候,有一天我和朋友在城鐵上聊起vista,我打賭說 vista今年肯定發布不了。當時她不信,現在我贏了。說真的,我現在擔心的不是vista什麼時候發布的問題,而是vista還能不能發布的問題。不知道為什麼,使用vista的時候,我總是有一種它可能隨時崩潰的感覺 有新聞說,vista有60...