2012-03-06 5 views
4

私は正しいY刚性ループ機能を持って、n個の答えが入力されているが、選択の終わりに私はエラーを取得:スタックが壊れた

Time Check Failure #2 - Stack around the variable 'YESNO' was corrupted. 

IVEがGoogleで見ていたし、カント本当に私のコードは以下の通りですこのエラーへのrelivent答えを見つける:

void Mesh_equations(float a,float b,float c,float d,float e,float f){ 

    char YESNO[1];                     //define variables. 
    int loop=0;                     //loop set to zero. 
    while(loop==0){                    //while loop initiated whilst loop is equal to zero. 
    cout <<"\nDo you want to display your coefficients for the mesh equations...(y/n)?"; 
    cin>>YESNO;                     //prompt and cin. 
    if (YESNO[0] == 'Y' || YESNO[0] == 'y'){               //if cin is 'Y' or 'y' 
     system("CLS"); 
     cout<<"Loop One:\n(" <<a <<")" <<"Ix + (" <<b <<")" <<"Iy = (" <<e <<")" <<endl 
      <<"Loop Two:\n(" <<c <<")" <<"Ix + (" <<d <<")" <<"Iy = (" <<f <<")" <<endl<<endl 
      <<setw(5)<<" Where ;\n" 
      <<setw(5)<<"A ="<<a<<endl 
      <<setw(5)<<"B ="<<b<<endl 
      <<setw(5)<<"C ="<<c<<endl 
      <<setw(5)<<"D ="<<d<<endl 
      <<setw(5)<<"E ="<<e<<endl               ////set the field width to 5 characters. 
      <<setw(5)<<"F ="<<f <<endl<<endl;             //display. 
     loop=1;                     //loop is 1, while loop passed. 
     system("pause"); 
    } 
    else if(YESNO[0] == 'N' || YESNO[0] == 'n'){              //if 'N' or 'n', while loop passed. 
    loop=1; 
    } 
    else{                      //if neither y or n is enterred input must be incorrect. 
    cout <<"bad answer, try again\n"; 
    Beep (600,100); 
    loop=0;                      //loop is zero, while loop continues. 
    } 
} 
} 

おかげ Houlahan。

答えて

4

これは、YESNOが文字の配列であり、cin >> YESNO;がこの配列にNULLターミネータを書き込んでいるために起こります。

YESNOの宣言をchar YESNO;に変更し、配列演算子を削除してください。

1

YESNOを大きくします。つまり、1ではなく10文字にします。ヌル文字は、配列内の最後の許容位置の後に置かれます。これがエラーの原因です。

+0

これは、誰かが応答として長く何かを入力した場合、破損を防止するつもりはありません...代わりに文字列を使用してみてくださいhttp://www.cplusplus.com/reference/string/string/ – Poodlehat

+1

私は同意する、入力することができます実際には以下のようにsetwを使って制限されています:cin >> setw(3)>> YESNO;アロイにはい、いいえなど – marcinj

2

アレイの境界からアレイ要素が割り当てられた場合、実行時に「変数の周りのスタックが破損しました」というメッセージが表示されます。したがって、この問題を解決するには、割り当てられた配列のサイズと割り当てられている値を確認してください。

+0

"out of bounds"はおそらく "cin >> YESNO"によって引き起こされました。これは "文字列を読み込む"ことを意味します。あなたは "cin >> YESNO [0]"を行うべきです。 – mikijov

+0

あなたは私に多くの助けをします...私は昨日から問題を解決しようとしていました。しかし、できませんでした。 – MMH

関連する問題