MS studio 17 Стек вокруг переменной был поврежден

Привет я продолжаю получать стек вокруг переменной nhour был поврежден ошибка, и я не могу понять, почему. Я пытаюсь ввести время и проверить его, чтобы убедиться, что это хороший вход. кажется, что увеличение или уменьшение массива не работает. Я также добавил проверки и вывод, кажется, найти, пока я не получаю ошибку

void DEPARTURETIME(string& szdepartureTime)
{
bool berror;
char cdeparture[9];
int nhour[2],
nminute[2],
nhourValue,
nminuteValue;
nhour[0] = 0;
do
{
berror = false;
system("CLS");
cout << "Enter departure time. (HH:DDAM/PM)" << endl;
cin >> cdeparture;
cin.ignore();
berror = ERRORCHECK();
for (int i = 0; i < 2 && berror != true; i++)
{
nhour[i] = CONVTOINT(cdeparture[i]);
}
//Beginning of testing hour for errors
if (nhour[0] > 1 && berror != true)
{
cout << "Error, can not exceed 12 hours." << endl;
system("pause");
berror = true;
}
else if (nhour[0] == 1)
{
nhour[0] *= 10;
}
cout << nhour[0] << nhour[1] << endl;
nhourValue = nhour[0] + nhour[1];
cout << nhourValue << endl;
if (nhourValue > 12 || nhourValue <= 0 && berror != true)
{
cout << "Error, can not exceed 12 hours and can not be
zero." << endl;
system("pause");
berror = true;
}
//End of testing hour for errors
//Beginning of testing for a colon
if (cdeparture[2] != ':' && berror != true)
{
cout << "Error, you need a colon inbetween hours and minutes." << endl;
system("pause");
berror = true;
}
//End of testing for a colon
for (int i = 3; i < 5 && berror != true; i++)
{
nminute[i] = CONVTOINT(cdeparture[i]);
}
//Beginning of testing for minute errors
if (nminute[3] > 6 && berror != true)
{
cout << "Error, minutes can not exceed 60." << endl;
system("pause");
berror = true;
}
else if (nminute[3] > 0 || berror != true)
{
nminute[3] *= 10;
}
nminuteValue = nminute[3] + nminute[4];
if (nminuteValue > 60 && berror != true)
{
cout << "Error, minutes can not exceed 60." << endl;
system("pause");
berror = true;
}
//End of testing for minute errors
cdeparture[5] = toupper(cdeparture[5]);
cdeparture[6] = toupper(cdeparture[6]);
//Beginning of testing for AM and PM errors
if (cdeparture[5] != 'A' && cdeparture[5] != 'P' || cdeparture[6] != 'M' && berror != true)
{
cout << "Error, must have AM or PM." << endl;
system("pause");
berror = true;
}
} while (berror != false);
//End of testing for AM and PM errors
for (int i = 0; i < 7; i++)
{
szdepartureTime += cdeparture[i];
}
return;

}

и это другая функция, которая называется

int CONVTOINT(char cchar)
{
int value = cchar - '0';
if (value < 0 || value > 9)
{
cout << "Error, Convertion failed" << endl;
system("pause");
return 0;
}
return value;
}

-1

Решение

Вы заявляете nminute как массив с двумя элементами, но когда вы используете его, вы получаете доступ к элементам 3 и 4 (что требует, чтобы массив имел 5 элементов). Поскольку вы обращаетесь к концам массива, вы сталкиваетесь с неопределенным поведением. В этом случае ваш компилятор вставил код для обнаружения этой проблемы и сообщает вам об этом.

Чтобы исправить это, измените подписку на nminute при использовании в коде только для доступа к элементам 0 и 1.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector