[英]Print reverse Array = Segmentation fault (core dumped)
看到當您嘗試訪問空的 memory 時可能會發生錯誤,但似乎我很好地定義了我的“for 循環”,所以我幾乎被困在這里..
int main () {
int size, arr[size];
printf("Enter the size of the array: ");
scanf("%d", &size);
printf("Enter %d numbers: ", size);
for (int i = 0; i < size; i++) {
scanf("%d", &arr[i]);
}
printf("In normal order: \n");
for (int j = 0; j < size; j++) {
printf("|%d|\n", arr[j]);
}
printf("In reverse order: ");
for (int k = size - 1; k >= 0; k--) {
printf("|%d|\n", arr[k]);
}
return 0;
}
int size, arr[size];
沒有意義。 由於某種原因,這個錯誤出奇地普遍。 請參閱有關 Codidact 的常見問題解答: How to declare variable-length arrays correctly? 引用該帖子的開頭部分:
從上到下執行了C個程序。 您不能將未初始化的變量作為其大小參數來聲明 VLA。 出於同樣的原因,你不能這樣做:
int x; printf("%d\n",x); scanf("%d",&x);
如果我輸入
5
作為該程序的輸入,那么它不會神奇地返回 go 並將printf
更改為打印5
。 因為已經太晚了——我在打印后接受了輸入。同樣,
int array[size];
不會在array
和size
之間創建一些神奇的聯系。 該數組被創建為與size
在遇到該源代碼行時的值一樣大。 如果size
未初始化,則會出現未定義的行為。 之后更改size
不會更改 VLA 的大小。 而且您也無法調整 VLA 的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.