Стек вокруг переменной поврежден - PullRequest
4 голосов
/ 06 марта 2012

У меня есть функция, которая зацикливается до тех пор, пока не будет введен правильный y, n ответ, но в конце выбора я получаю сообщение об ошибке:

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

Я заглянул в Google и не могу найти что-либоОтветы на эту ошибку приведены ниже:

    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.
    }
}
}

Спасибо, Хоулахан.

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

Это происходит потому, что YESNO является массивом символов, а cin >> YESNO; записывает в этот массив терминатор NULL.

Измените объявление YESNO на char YESNO; и удалите операторы массива, и все готово.

2 голосов
/ 16 августа 2012

Если элемент массива назначен вне границы массива, то во время выполнения отображается сообщение «Стек вокруг переменной поврежден». Таким образом, чтобы решить эту проблему, обеспечьте размер выделенного массива и присвоенное ему значение.

1 голос
/ 06 марта 2012

Сделать YESNO больше, т.е. 10 символов вместо 1. Нулевой символ ставится после последней разрешенной позиции в массиве, и это является причиной ошибки.

...