2017-06-06 76 views
-3

How dangerous is it to access an array out of bounds?這不會告訴存儲的值是多少。超出數組大小元素值

當我嘗試打印出程序中顯示的數組大小元素時,它正在打印0。它會總是0或一些垃圾值。

方案

#include<stdio.h> 
int main() 
{ 
    int a[5] = {10}; 
    printf("\n\ra[6] = %d",a[6]); 
    printf("\n\ra[7] = %d",a[7]); 
    printf("\n\ra[8] = %d",a[8]); 
    printf("\n\ra[9] = %d",a[9]); 
    return 0; 
} 

輸出

一個[6] = 0 [7] = 0 [8] = 0 [9] = 0

我的問題是什麼將超出數組大小元素的值?它總是垃圾值或零?

+1

它*未定義*,任何可能發生您的無效訪問。 –

+0

@Stargateur nope它是不同的我問什麼將是價值 –

+2

你知道什麼* undefined *意味着什麼? –

回答

4

當我嘗試打印出數組大小元件....

等待,停止!!任何超過用於i(指數)值的4值在像int a[5] = {10};定義的陣列的情況下[C數組使用0-based indexing]是無效的存儲器訪問,這導致undefined behavior。根本不能指望什麼東西

  • 如果幸運的話,運行該程序時可能會收到分段錯誤,強烈指示某種無效內存訪問。

  • 如果你運氣不好,該程序可能會讀取存儲在你的筆記本電腦上的信用卡號碼,併爲你的團隊訂購任何小馬比薩餅,並將餘下的錢轉移到ISIS的匿名賬戶。 Iff你願意面對那隻能夠訪問超出限制的內存,否則,不要這樣做。

摘要:因爲你可以,或語法允許只是不寫代碼。嘗試理解要編寫的代碼。陣列大小被提及對於共振。如果我們不必考慮尺寸,爲什麼那裏的尺寸在堡壘裏?

+0

在程序中給出它不會給出任何錯誤,它會給一些值。我的問題是它總是垃圾值或零,因爲在一些編譯器中,我變爲零 –

+1

@EmbeddedC請在我的答案中閱讀鏈接的wiki :) –

+0

確定,並且答案有什麼問題? –