Сортировка динамического массива c

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

Учитывая пример ввода

Вывод для приведенного выше фрагмента кода:

Как вы можете видеть, сортировка внутри структуры Box хороша, но сортировка по Box проблематична, может кто-нибудь помочь объяснить проблему здесь и как ее решить. Спасибо

Я знаю, что указатель на поле может быть дьяволом, но я не понимаю, почему, пожалуйста, объясните мне причины и примеры.
Кроме того, ниже приведен фрагмент кода из примера решения. Здесь единственное отличие состоит в том, что он использует массив struct вместо указателя на динамически размещенный массив и получает правильный вывод

Я попытался добавить конструктор копирования и перегрузку присваивания в мою структуру Box, но это не сработало, как ожидалось. Код ошибки ntdll!RtlpNtEnumerateSubKey() at 0x779d0725
Что-то не так с этой реализацией?

Решение

Понятно, почему порядок неправильный. Ваш operator это неправильно, он должен вернуться true как только один элемент меньше другого.

Что касается повреждения данных, это потому, что вы нарушили «правило трех» — у вас есть пользовательский деструктор, но нет конструктора копирования или оператора присваивания. sort марки копии элементов, которые он сортирует, и когда деструктор попадает, он удаляет указатель, который он держал. Это приводит к неопределенному поведению.

Редактировать: Причина, по которой код работает с фиксированным массивом, но не с указателем, заключается в том, что конструктор копирования по умолчанию и операторы присваивания создают полную копию — когда оригинал уничтожается, он не портит копии и не делает недействительной их память.

Возможно, ваше «исправление» работает, но теперь у вас утечка памяти. Никто никогда не собирается delete эти указатели.

Читайте также:  Продажа билетов бизнес план

Еще один момент о operator , должно никогда вернитесь с A=B; if(A но ваш делает.

Хотите улучшить этот вопрос? Update the question so it’s on-topic for Stack Overflow на русском.

Закрыт 10 месяцев назад .

компилятор выдает Segmentation fault (core dumped). Результат должен быть таким например, исходный – <<3,5,8>,<2,1,7>,<4,6,9>> должно получиться <<1,2,3>,<4,5,6>,<7,8,9>>

1 ответ 1

Почему вдруг цикл инициализации массива mat идет до b , а не до n .

Функция сравнения должна принимать параметры типа const void * , а не const int *

Для использования qsort надо было с самого начала выделять память для элементов массива как один непрерывный блок

Вызов qsort при этом будет выглядеть так

Память следует не забывать освобождать

Для использования функции time необходимо включить

Сообщество, где люди делятся уникальным опытом

Вопросы и ответы по любой теме от IT сообщества

Помогаем строить карьеру в IT-индустрии

Биржа удаленной работы для IT-специалистов

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *