Ошибка при доступе к массиву — стек вокруг переменной «Score» поврежден

Я новичок в C ++ и написал код, в котором я получаю следующую ошибку:

Ошибка проверки времени выполнения # 2 — стек вокруг переменной ‘Scores’ был поврежден

Что вызывает эту ошибку?

Вот мой код:

#include <iostream> // Enables cout and endl
#include <string>
#include <sstream>
#include "stdafx.h"
using namespace std;
int getInput();

int main()
{
int scores[5];
int i;
int j;
int numberOfScores;

for (i = 0; i < 6; i++) // Sets all 5 elements of the array to zero
{
scores[i] = 0;
}

cout << "How many scores do you have to enter?\n" << endl;
cin >> numberOfScores;for (j = 0; j < numberOfScores; j++) // Gather test scores and increases each array index as that score is entered
{
scores[getInput()] ++;
}

cout << "The number of zeros: " << scores[0] << endl;
cout << "The number of ones: " << scores[1] << endl;
cout << "The number of twos: " << scores[2] << endl;
cout << "The number of threes: " << scores[3] << endl;
cout << "The number of fours: " << scores[4] << endl;
cout << "The number of fives: " << scores[5] << endl;return 0;
}

int getInput()
{
int enteredScore;
cout << "Enter the test scores one at a time.\n";
cout << "The range of scores is 0 to 5.\n";
cin >> enteredScore;

if (enteredScore >= 0 && enteredScore <= 5)
{
return enteredScore;
}
else
{
cout << "Error!  The range of scores is 0 to 5.\n";
cout << "Enter the test scores one at a time.\n";
cin >> enteredScore;
return enteredScore;
}
}

-6

Решение

Похоже, это объявление:

int scores[5];

Это неверно. Это создает массив с 5 числами в нем, индексы из scores[0-4]Однако вы постоянно ссылаетесь на score[5], шестой элемент массива во всей вашей программе. Я рекомендую перейти на

int scores[6];
5

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

Эта проблема:

Вы получаете доступ к вашему массиву за пределами нескольких мест.

Здесь вы просматриваете 6 элементов, когда у вас есть только 5:

for (i = 0; i < 6; i++) // Loops through 6 elements
{
scores[i] = 0;
}

Здесь вы звоните getInput() и использовать возвращаемое значение в качестве индекса:

scores[getInput()] ++;

Однако первая половина функции принимает входные данные от пользователя в диапазоне от 0 до 5, что позволяет получить доступ к 6 элементам:

if (enteredScore >= 0 && enteredScore <= 5)

Ситуация становится еще хуже, если пользователь вводит число за пределами этого диапазона, поскольку затем ему предоставляется вторая возможность ввести число, только на этот раз нет проверки и любой введенный номер принимается:

cin >> enteredScore;
return enteredScore;

Наконец, вы снова пытаетесь получить доступ к 6-му элементу здесь:

cout << "The number of fives: " << scores[5] << endl;

Решение:

Во-первых, вам нужно сделать одну из двух вещей:

  • Изменить for петли, if заявление и cout заявления, чтобы они не получили доступ к индексу 5

или же:

  • Создайте массив так, чтобы он имел 6 элементов: int scores[6];

Во-вторых, вам нужно исправить ошибку в вашем getInput() функция, так что он проверяет правильность ввода. Вы можете попробовать это, например:

int getInput()
{
int enteredScore;
cout << "Enter the test scores one at a time.\n";
cout << "The range of scores is 0 to 4.\n";
cin >> enteredScore;

while (enteredScore < 0 || enteredScore > 4)
{
cout << "Error!  The range of scores is 0 to 4.\n";
cout << "Enter the test scores one at a time.\n";
cin >> enteredScore;
}
return enteredScore;
}
1

У вас ошибка в

 cout << "The number of fives: " << scores[5] << endl;

Ваш массив имеет размер 5, но вы получаете доступ к 6-му элементу.

То же самое с for (i = 0; i < 6; i++) должно быть i < 5,

0
По вопросам рекламы [email protected]