Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».
Закрыт 10 месяцев назад.
struct disciplines {
char discipline[20];
};
struct students {
char group[10];
char discipline[20];
char teacher[30];
char name[30];
int mark;
};
void showAverage(std::vector<students>& student, std::vector<disciplines>& disList) {
disciplines str;
for (int i = 0; i < student.size(); i++) {
disciplines t1;
strcpy_s(t1.discipline, student[i].discipline);
for (int j = 0; j <= disList.size(); j++) {
disciplines t2;
strcpy_s(t2.discipline, disList[i].discipline);
if (t1.discipline == t2.discipline) break;
else{
strcpy_s(str.discipline, student[i].discipline);
disList.push_back(str);
}
}
}
}
Пытаясь скопировать поле из одного вектора в другой вызывает ошибку"Необработанное исключение по адресу 0x0F64ED76 (ucrtbased.dll) в Проект.exe: Недопустимый параметр был передан функции, для которой недопустимые параметры вызывают неустранимую ошибку." Срабатывает ошибка в строке
strcpy_s(t2.discipline, disList[i].discipline);
Поля являются массивами char. Первый такой же вызов отрабатывает нормально. В чем проблема и как ее решить?
Доступ в массив disList почему-то делается по индексу i, который лежит в диапазоне индексов массива student. Почему? Эти массивы как-то связаны?
Тело цикла по j никак не зависит от j и индекс j более нигде вообще не используется. Возможно индекс j предназначался для доступа в массива disList?
Но тогда почему условие во втором цикле использует <=
for (int j = 0; j <= disList.size(); j++) {
Доступ в disList по такому индексу вызовет вылет за пределы массива.
Бессмысленное сравнение (1, 2, 3)
if (t1.discipline == t2.discipline)
Это условие всегда ложно. Следовательно на каждой итерации цикла по j делается disList.push_back(str);. Но так j никогда не сможет догнать disList.size()!
Продвижение своими сайтами как стратегия роста и независимости