私は以下に示す非常に簡単なプログラムを持っています。私はcout
を挿入して、どの行が実行されるかを知っています。プログラムがループに突き当たった
int main(void) {
int n_in = 0;
int keys = 0;
cin>>n_in;
long long in_array[n_in];
for(int i=0; i<n_in; i++){
cin>>in_array[i];
}
cout<<"Executed";
cin>>keys;
cout<<"Executed"<<" "<<keys;
int index[keys];
long long key_array[keys];
cout<<"Executed";
for(int j=0; j<keys; j++){
cin>>key_array[j];
cout<<"Iteration" <<j<<"complete" ;
}
cout<<"Executed";
//bin_search(in_array, n_in, key_array, keys, index);
for(int i=0; i<keys; i++){
cout<<index[i]<<" " ;
}
return 0;
}
スクリーンショットが与えられます。
あなたがイメージから見ることができるように、最後の反復が完了したことがないと私は理由を知りません。 iteration0complete
以降の数字は入力です。
誰かが何が起きているのか説明できますか?
http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Biffen
技術的には、C++には[可変長配列]がないため、コードは有効ではありません( http://en.wikipedia.org/wiki/Variable-length_array)。これは、コンパイラの拡張機能のために移植性があり、代わりに['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)を使うべきです。 –
@silflowいいえ、技術的には規格に準拠していません。コンパイラの拡張が必要です。しかし、UBではありません。 – juanchopanza