C語言遇到的陣列溢位問題

2021-08-30 06:18:41 字數 1626 閱讀 9153

今天寫了個判斷陣列中資料的最大值問題的**,發現了乙個有趣的情況,陣列溢位值總是乙個;

現附上今天寫的判斷陣列最大值的**:

#define _crt_secure_no_warnings 1

#include#includeint main()

; int max_num = 0;

int i = 0;

for (i = 0; i < sizeof(arr) / sizeof(int); i++)

} printf("最大值為:%d\n",max_num);

system("pause");

return 0;

}

問題發現是這樣的,之前在for迴圈之外還寫了個while迴圈進行判定(不知道怎麼想的,寫了個while迴圈),大概就是這:

while (arr[i]) 

} }

本來想的是arr[i]的i值取值超過資料限定,當前arr[i]值應該為null(這是錯誤的猜想);結果發現沒有輸出值了,單步後發現arr[i]的溢位值為乙個常數,不為空,進入了while死迴圈。

就如上所說,這個溢位值是-858993460,給了兩個陣列結果還是一樣。

#define _crt_secure_no_warnings 1

#include#includeint main()

; int arr1[100] = ;

int i = 0;

int j = 0;

for (i = 0; i < sizeof(arr) / sizeof(int); i++);

for (j = 0; j < sizeof(arr1) / sizeof(int); j++);

printf("%d\n", arr[i]);

printf("%d\n", arr1[j]);

system("pause");

return 0;

}

經過查閱知道,當你的陣列溢位時,vs會自動給你的變數進行賦值操作,而我的這個是int型變數,系統自動賦值為-858993460,並不存在什麼溢位即為空的猜想。

另外給出的char型變數進行的溢位判斷如下

#define _crt_secure_no_warnings 1

#include#includeint main()

; //int arr1[100] = ;

char arr[20] = "a,b,f,g,s,t,y";

char arr1[100] = "d,k,l,y,r,s";

int i = 0;

int j = 0;

for (i = 0; i < sizeof(arr) / sizeof(char); i++);

for (j = 0; j < sizeof(arr1) / sizeof(char); j++);

printf("%c\n", arr[i]);

printf("%c\n", arr1[j]);

system("pause");

return 0;

}

其溢位值都為 ?  (注:字元型陣列需要用「 」 雙引號,而不是大括號)。

c語言之堆疊溢位問題

對於c來說,函式呼叫,系統要做三個工作 這裡多提一下,關於陣列作為形參呼叫函式時,為什麼需要連同陣列長度一起傳進來?這裡是因為,陣列作為引數傳遞的本質只是乙個指標,也就是乙個位址,編譯器並不關心這個位址後邊有多少有用資料,編譯器只看得到指標所指的資料。所以在被呼叫函式中,無法直接知道這個陣列的長度,...

c語言的算術運算溢位問題

1 關於溢位的結論 可能出現的情況是結果的資料型別定義的小了,導致結果不正確。關於計算溢位,看書上說的c語言中有符號數計算溢位的話會不知道發生什麼 溢位結果未定義 看編譯器怎麼處理。我在keil上試了下,溢位會把溢位部分砍掉,比如定義的是short型的,結果保留2個位元組。short aa 3276...

有關C 陣列溢位問題,C 陣列可以開多大

乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於 資料結構 中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時 可能由os回 收 注意它與資料結構中的堆是兩回事,...