2017-09-26 20 views
0
#include <iostream> 
using namespace std; 

int main() 
{ 
    int nums[20] = { 0 }; 
    int a[10] = { 0 }; 

    cout << a << endl; 
    cout << nums << endl; 

    cout << "How many numbers? (max of 10)" << endl; 
    cin >> nums[0]; 
    for (int i = 0; i < nums[0]; i++) 
    { 
    cout << "Enter number " << i << endl; 
    cin >> a[i]; 
    } 
    // Output the numbers entered 
    for (int i = 0; i < 10; i++) 
     cout << a[i] << endl; 
    return 0; 
} 

このプログラムが実行されている場合、いくつの番号に対して1つの数字が255で、1つの数字ごとに9が入力されるとクラッシュします。なぜこのC++プログラムはシステムクラッシュを引き起こしますか?

+2

「それがクラッシュする」の2番目の「それ」は何ですか?コンピュータ全体のOS、またはあなたのプログラムだけ? –

+0

C++を学んでいる場合は、最初に行う必要があるのは、標準ライブラリで利用できるツールを理解することだけです。 ['std:vector'](http://en.cppreference.com/w/cpp/container/vector)は、配列のようなデータを格納するときに開始するのに適しています。ここにあるような固定長のCスタイルの配列に優先して使用してください。 – tadman

答えて

1

ループの最大境界としてnums[0]を使用しています

for (int i = 0; i < nums[0]; i++) 
    { 
    cout << "Enter number " << i << endl; 
    cin >> a[i]; 
    } 

あなたのケースでは、255ループを実行しており、各反復で値をa[i]に追加します。

配列aは10要素のサイズを持つと宣言しましたが、255要素を追加しようとしています。

これは問題です。 aのサイズは、メインループの最大境界値(nums[0])と同じである必要があります。

0

あなたのプログラムがクラッシュするのはなぜですか? aには10個の要素しか割り当てられていません。


"(max of 10)"と伝えます。ユーザーはこれを無視し、255に入力します。あなたは何か他のことをする前にあなたの警告を聞いたことを確認する必要があります。

cout << "How many numbers? (max of 10)" << endl; 
cin >> nums[0]; 

// Has the user listened to your warning? 
if (nums[0] > 10) { 
    cout << "Bad input!" << endl; 
    return 0; 
} 
1

そのint a[10] = { 0 };なぜなら、あなたはあなたがループ

for (int i = 0; i < nums[0]; i++) 
    { 
    cout << "Enter number " << i << endl; 
    cin >> a[i]; 
    } 

または使う初期

であなたのセルの長さを変更するためにあなたを修正する必要があります10日のセルまたは場所9 過ぎてインデックスにそれをしよう
関連する問題