Не получается перегрузить оператор = для структуры. Программа компилируется, но при выполнении прямого слияния крашится.
Структура:
struct Student
{
QString fio;
int group;
int ysp[5];
Student& operator = (const Student &s)
{
fio = s.fio;
group = s.group;
ysp[0] = s.ysp[0];
ysp[1] = s.ysp[1];
ysp[2] = s.ysp[2];
ysp[3] = s.ysp[3];
ysp[4] = s.ysp[4];
ysp[5] = s.ysp[5];
return (*this);
}
};
Прямое слияние сортировка:
void MainWindow::Merge(Student *list_S, int left, int right)
{
if (right == left) return;
if (right - left == 1)
{
if (ui->Ascending->isChecked())
{
if (list_S[right].group < list_S[left].group) swap(list_S[right], list_S[left]);
}
if (ui->Descending->isChecked())
{
if (list_S[right].group > list_S[left].group) swap(list_S[right], list_S[left]);
}
return;
}
int m = (right + left) / 2;
Merge(list_S,left, m);
Merge(list_S,m + 1, right);
Student buf[right];
int xl = left;
int xr = m + 1;
int cur = 0;
while (right - left + 1 != cur)
{
if (xl > m) buf[cur++] = list_S[xr++];
else if (xr > right) buf[cur++] = list_S[xl++];
else if (ui->Ascending->isChecked() && list_S[xl].group > list_S[xr].group)buf[cur++] = list_S[xr++];
else if (ui->Descending->isChecked() && list_S[xl].group < list_S[xr].group)buf[cur++] = list_S[xr++];
else buf[cur++] = list_S[xl++];
}
for (int i = 0; i < cur; i++) list_S[i + left] = buf[i];
}
Всё заработает если поправить в сортировке:
Student buf[right+1];
Строчка
ysp[5] = s.ysp[5];
лишняя. У вас в массиве 5 элементов, вот пять и копируйте (с 0 по 4), а в этой строчке вы гадите в память.
А на самом деле определять оператор присваивания в данном случае не нужно, так как оператор присваивания по умолчанию (синтезируемый компилятором автоматически) делает ровно то же самое.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется текстовый файл, в который записываются значения из массива типа intЗапись происходит таким образом:
Подскажите пожалуйста, какую технологию выбрать для работы с *STL файлами, и если возможно, небольшое интро в нее
Так же интересно, возможно ли как в джаве создать анонимный наследованный класс и сразу определить в нем методы Вместо этого: