2017-10-10 10 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

になります実際に問題があり、本物の助けが必要な場合は、私は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の要素として0を持つ4 charの配列です。この配列は文字列リテラルではありません。コードが配列の最後を過ぎて書き込むと、プログラムの振る舞いは未定義です。

あなたは、配列はそれがないと言って6つの要素を持たせることができます。

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

この配列の最後の要素の値は、あなたがドン何かをdownvotingのポイントは」何0

関連する問題