strcpy_s вызывает ошибку [закрыт]

144
01 февраля 2020, 01:10
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «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. Первый такой же вызов отрабатывает нормально. В чем проблема и как ее решить?

Answer 1
  • Доступ в массив 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()!

READ ALSO
Обработка исключений C++

Обработка исключений C++

Есть одна исключительная ситуация, но нужно чтобы на нее было 2 разных реакции

184
Крашется компилятор qt

Крашется компилятор qt

При отладки кода на c++, IDE выводит вот такое сообщение: FTH: (11040): * Fault tolerant heap shim applied to current processThis is usually due to previous crashes

145
Ошибка: &ldquo;Не определен базовый класс&rdquo;

Ошибка: “Не определен базовый класс”

Не могу понять в чем ошибка при наследовании, компилятор пишет, что не определен базовый класс, хотя все заголовки и определение класса я сделалВот...

154