2017-10-10 114 views
-7

我不知道我在做什麼錯了我的程序,所以它不會輸出它的意思輸出。使用C++在數組中插入值時出現奇怪的異常/錯誤

我寫了一個程序插入值到數組中特定的點,它的工作原理與此代碼精緻漂亮,

#include <iostream> 
using namespace std; 

main() { 
    int arr[] = {1,3,5,7,8}; 
    int item = 10, k = 3, n = 5; 
    int i = 0, j = n; 

    cout<<"The original array elements are :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 

    n = n + 1; 

    while(j >= k) { 
     arr[j+1] = arr[j]; 
     j = j - 1; 
    } 

    arr[k] = item; 

    cout<<"The array elements after insertion :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 
} 

以下是該程序的輸出:

enter image description here

但如果我改變陣列大小即7,那麼這將發生:

#include <iostream> 
using namespace std; 

main() { 
    int arr[] = {1,3,5,7,8,9,6}; 
    int item = 10, k = 3, n = 7; 
    int i = 0, j = n; 

    cout<<"The original array elements are :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 

    n = n + 1; 

    while(j >= k) { 
     arr[j+1] = arr[j]; 
     j = j - 1; 
    } 

    arr[k] = item; 

    cout<<"The array elements after insertion :\n"; 

    for(i = 0; i<n; i++) { 
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 
} 

輸出上述程序的:

enter image description here

我無法理解的是什麼,在哪裏我做錯了有這等程序異常/錯誤。

+0

什麼downvoting東西你不點t甚至費心去閱讀,哪一個實際上是一個問題,並且需要真正的幫助,因此我知道stackoverflow的標準,因此請避免將我的問題推遲到關閉狀態,除非您有充分的理由證明這是一個偶然或錯誤的問題。 –

+0

數組的大小在編譯時固定。試圖超出分配數組的最後一個元素,導致未定義的行爲。 – Dan

+1

什麼不正常?你期望輸出什麼? – user463035818

回答

2

只保留重要的部分,你的代碼是多還是少這樣的:

int arr[] = {1,3,5,7,8,9,6}; 
    int n = 7; 
    n = n + 1; 
    for(i = 0; i<n; i++) { 
    cout<<"arr["<<i<<"] = "<< arr[i] <<"\n"; 
    } 

陣列具有固定的大小。你不能改變它,因此你也不能「插入」一個元素到數組中。您的arr有7個元素,當您訪問arr[7](在循環內部)時,您正在訪問數組的邊界。這是未知的行爲,你的代碼可以輸出任何東西。

如果你想插入元素到一個動態大小的數組,然後看看std::vector

3
int arr[] = {1,3,5,7,8}; 

該數組的大小爲5,因爲它的初始值設定項有5個元素。 只有獲得一個額外元素的數組是字符串文字:​​是一個4 char的數組,其中0作爲第四個元素。這個數組不是字符串文字。當代碼寫入數組的末尾時,程序的行爲是未定義的。

您可以在陣列說,它確實有六大要素:

int arr[6] = {1,3,5,7,8}; 

這個數組中最後一個元素的值是0。