Вы обращаетесь к памяти, которая не является частью вашего массива, следовательно, это сообщение об ошибке.Вы должны сначала проверить индекс, прежде чем присваивать значение, используя оператор индекса [].
Вот ваш фрагмент кода ( с комментариями ), который вызвал проблему:
cin >> v;
myData[i] = v; // Direct assignment without validating i
// i needs to be validated before this assignment
Есть несколько вещей, на которые я бы хотел обратить внимание:
Для инициализации с тем же значением вам не нужен цикл, потому что std :: array :: fill () функция-член делает именно это.
Пример:
std::array<int, 10> data;
data.fill( 1 );
Вы используете std::array
, что означает, что вы по крайней мере используете C ++ 11.Таким образом, для обхода массива вы можете использовать цикл C ++ 11 range-for следующим образом:
for ( const auto& i : data )
{
std::cout << i << ' ';
}
Возможно, вы захотите посмотреть auto спецификатор , еслиВы еще не знакомы с ним.
Я не знаю, почему вы используете здесь цикл do-while
.Вы можете использовать простой while
бесконечный цикл ( для целей обучения ), разрывая его на неверном вводе индекса, используя if-else
для проверки индекса перед присваиванием.
Например:
while ( true )
{
// Print array here...
std::cin >> index;
if ( /* index is out of bounds */ )
{
std::cerr << "ERROR: Out-of-range index!\n";
break; // Exit from loop here on invalid index
}
else
{
std::cin >> value;
data[ index ] = value;
}
}
Пожалуйста, взгляните на std::array::at()
функцию-члена, которая выполняет проверку границ и выдает исключение при нарушении.
Iя не уверен, что вы делаете с этой частью, потому что скобки вокруг std::cout
здесь избыточны:
while(i >= 0 && i < myData.size()); // do-while ends here
{
cout << endl <<"Index out of range: Exit "<< endl;
}
Возможно, вы путаете do-while
с while
loop.
Пожалуйста, не забудьте отформатировать свой код в будущем.Используйте функции форматирования кода в вашей среде IDE или вы также можете использовать любые онлайн-сайты форматирования кода (например, http://format.krzaq.cc/) при публикации кода на SO. Спасибо!