2012-05-02 15 views
0
int number; 
     cout<<" Please select which item to change:"<<endl; 

     for(int i=0;i<=count;i++) 
     { 
      cout<<i<<" "<<v[i]->getName()<<endl; 
     } 


     cin>>i; 
     cout<<"Current number of items: "<<v[i]->getNumber()<<endl; 
     cout<<"Enter new value: "<<endl; 
     cin>>number; 

これはスイッチのケース内ですが、プログラムは現在forループの後で終了しています。 アイデア?これがプログラムを終了させる理由があれば教えてください。

+1

「i <= count」は不審に見えます。 'count'が' v'の要素の数なら、あまりにも多くの要素にアクセスします。 – hmjd

+1

プログラムですか?不可能! –

答えて

2
for(int i=0;i<=count;i++) 

は本当に使用する必要があります。

for(int i=0;i<count;i++) 

count要素がある場合。 v[ count ]にアクセスしようとすると、古典的なoff-by-oneエラーであるコレクションの最後を過ぎて1つ移動し、UBを呼び出そうとしています。

+0

これを変更すると、プログラムが選択された後で再びプログラムが閉じられるまで実行されます –

+0

おそらく同じ問題です。ループの外に出たら、 'num'番目の要素にアクセスするには' num-1'を渡す必要があります。 Cでは、C++ではすべてのコレクションが 'n'要素コレクションのために' 0'、 '1'、...' n-1'から索引付けされます。だから、4番目の要素を得るためには、 'v [3] - > getNumber()'を使うべきです。 – dirkgently

関連する問題