簡體   English   中英

反向打印 Array = Segmentation fault (core dumped)

[英]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]; 不會在arraysize之間創建一些神奇的聯系。 該數組被創建為與size在遇到該源代碼行時的值一樣大。 如果size未初始化,則會出現未定義的行為。 之后更改size不會更改 VLA 的大小。 而且您也無法調整 VLA 的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM