C語言陣列下標越界問題,C語言二維陣列下標越界問題

時間 2021-07-21 03:29:33

1樓:光輝歲月

首先:陣列下標是從0開始的;所以a【】的下表是從0…9的, 即a[10]=a[9]是錯誤的。a指的是a[9]後面的那個儲存單元的的數值。

其次:void fun( int a, int n, int m)

這個j是多餘的。

2樓:

void fun( int a, int n, int m)

第一個括號是全形的括號!!!

還有陣列訪問越界 編譯器是不提示的

3樓:匿名使用者

c++中,並不會自動檢查下標越界問題。

第一個程式中,a[10]=a[9],改變了不屬於陣列空間的記憶體單元。這個錯誤不會在編譯和連線中反應出來,而是會一直執行下去,知道出現結果不正確。嚴重時可能導致宕機。

第二個程式也是同樣道理,陣列a只申請了三個整形的記憶體空間,越界的部分修改了記憶體中原來的資料。不過在這裡編譯會報錯。

要保證不破壞其他儲存空間中的資料只能說自己注意了。

4樓:

for ( i=m ; i>=n ; i-- ) a[i+1]=a[i] ;

這句話有錯。i =9時 i+1就是10;你定義的陣列只有10個元素。a[i+1]是啊a[10]是第十一個元素。陣列下標越界。

5樓:匿名使用者

明明知道是錯了 何必去研究這些錯誤的問題呢?至於如何保證a[10]就沒有破壞其他儲存空間中的資料呢??將 #define n 10 改為#define n 11 就可以了!

最後輸出應該為 12334

c語言二維陣列下標越界問題;

6樓:我和芯萪娘貼貼

因為c語言會把陣列中未賦值的值賦值為0

int a[3]=,,};

等價於int a[3]=,,};

所以a[1][2]為0

7樓:慕欣可

例如 int a[10]; 這是一個整型的陣列a,有10個元素:a[0]-a[9],因為正確的下標應該是從0開始,到9結束,與生活習慣中的1-10不一樣,a[10]是不存在的 如果你使用a[10] 於是產生一個a[10]的錯誤,即陣列下標越界。c和c++語言中陣列下標越界,編譯器是不會檢查出錯誤的,但是實際上後果可能會很嚴重,比如程式崩潰等

c語言下標越界問題

8樓:匿名使用者

這個跟系統有關係。

如果陣列越界是否破壞了原來的函式呼叫棧,或者訪問到了不可訪問的地址,或者寫了只有讀許可權的地址,那肯定會出錯了。

但是如果你的陣列的越界只是訪問到了原本就沒有被分配的記憶體,那麼就不會出錯,但是不能保證這麼下去一直不會錯。

9樓:淦海瑤

越界有危險,但是沒有辦法判斷,

10樓:於夜漆雕騫騫

第二個迴圈條件寫錯了吧

迴圈裡i只要小於等於6就會死迴圈了

比如第一次i為零時就會一直讓j自增跳不出迴圈自然了j大過陣列下標最大值時就越界了

關於c語言陣列引用下標越界問題,希望個大神幫忙解答!

C語言下標越界問題,c語言問題,二維陣列的下標越界怎麼看?

這個跟系統有關係。如果陣列越界是否破壞了原來的函式呼叫棧,或者訪問到了不可訪問的地址,或者寫了只有讀許可權的地址,那肯定會出錯了。但是如果你的陣列的越界只是訪問到了原本就沒有被分配的記憶體,那麼就不會出錯,但是不能保證這麼下去一直不會錯。 淦海瑤 越界有危險,但是沒有辦法判斷, 於夜漆雕騫騫 第二個...

C語言二維陣列的排序問題,c語言二維陣列

不是。這麼說吧,陣列名本身就是指標,指向陣列的第一個元素。至於你所說的呼叫呼叫二級 二維吧 陣列,難道不是如普通變數般直接呼叫嗎?根據問題補充說,這是不允許的,main 函式的形參是固定的不能傳遞指標。而一般的自定義函式只能用傳遞首地址的形式來傳遞二維陣列,例子如下 定義 int a x y int...

C語言陣列問題

二維陣列儲存的形式你應該知道吧,上面那個儲存成a 0 2 4 a 1 6 7 a 2 1 3 a 3 5 9 a本身是陣列的首地址,a 1中1是偏移量。在這個二維陣列裡,每行有兩個數,偏移量就自動成了8 每個int佔4個位元組,兩個就是8個 這是c語言的一種處理。a表示取a的地址裡的值,這個值還是地...