C ++ нарушение доступа для чтения, вектор структур - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть «программа», и я хочу вести себя так, как мне хотелось бы, но ситуация такова:

Я хочу создать вектор структур с максимальным элементом, равным 25, а затем инициализировать каждый Член структуры (на этот раз только имя) до функция. Моя проблема заключается в том, что я получаю ошибку исключения: ( Исключение выдается: нарушение прав чтения ), и я понятия не имею, что я сделал неправильно (и программа должна заканчиваться вводом имени одним символом "-".)

Код:

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#define MAXstudent 25
#include <sstream> 
#include <vector>
using namespace std;

struct student {
    string name; 
};

void get_input(vector<student>& student_group) {

    for (int i = 0; i < MAXstudent; i++) {

       //name
       string temp_variable = "";
       cout << "Student name: ";
       getline(cin, temp_variable);
       if (temp_variable != "-") {
           //student_group.push_back(student());
           student_group[i].name = temp_variable;
           cout << endl;
       }
       else {
           student_group.push_back(student());
           student_group[i].name = temp_variable;
           break;
       }
   }
}

void show_solution (vector<student>& student_group) {
    int i = 0;
    while (student_group[i].name != "-") {
        cout << "\nSolutions: " << endl;

        cout << endl << i + 1 << '.' << "kert name: " << student_group[i].name;
        i++;
    }

}

int main() {
    srand(time(0));
    vector<student>student_group[MAXstudent];
    get_input(student_group[MAXstudent]);
    show_solution (student_group[MAXstudent]);
}

Ответы [ 2 ]

3 голосов
/ 07 февраля 2020

Ваш main должен быть:

int main() {
    srand(time(0));
    vector<student>student_group(MAXstudent); // create one vector with MAXstudent elements in it
    //vector<student>student_group[MAXstudent]; - this creates MAXstudent vectors with 0 elements in each
    get_input(student_group);
    show_solution (student_group);
}

В своем коде вы создали массив векторов и использовали вектор вне границ этого массива. Вы должны понимать, что вы делаете, вместо того, чтобы создавать случайный код и ожидать, что он все равно будет работать.

1 голос
/ 07 февраля 2020

Вот что делает ошибку

get_input(student_group[MAXstudent]);
show_solution (student_group[MAXstudent]);
vector<student>student_group[MAXstudent];

Измените их на

get_input(student_group);
show_solution (student_group);
vector<student>student_group(MAXstudent);

student_group[MAXstudent] пытается достичь элемента индекса 25 (то есть) 26-го элемента в то время как ваш вектор равен 25 элементам.

Обратите внимание, что вектор - это просто объект, содержащий ваши элементы (контейнер), поэтому передайте его, как уже упоминалось, и тогда вы сможете получить доступ к своим элементам в теле функции по их неопределенности.

Я думаю, вам нужно больше узнать о std::vector s

...