Как исправить ошибку при компиляции данного кода на C++?
Ошибка "double free or corruption" часто возникает из-за повторного освобождения уже освобожденной памяти или из-за проблем с корректностью указателей. Для исправления этой ошибки следует следующие рекомендации: 1. Проверить все места, где освобождается память с помощью оператора `delete` (или его эквивалента), чтобы избежать случайного повторного освобождения. 2. Убедиться, что все указатели правильно инициализированы и не являются нулевыми. 3. Проверить наличие ошибок в алгоритме работы с памятью, например, переполнение буфера или чтение за пределами выделенной области. Чтобы исправить ошибку при компиляции кода на C++, следует учесть следующие моменты: 1. Проверить правильность синтаксиса и семантики кода. 2. Проверить наличие всех необходимых заголовочных файлов и библиотек. 3. Убедиться, что используемый компилятор поддерживает стандарты C++ версии, которую вы используете в коде. 4. Обратить внимание на предупреждения компилятора и исправить возможные проблемы. Если после выполнения этих действий ошибка остается, рекомендуется обратиться к сообществу разработчиков на форумах или сайтах вроде StackOverflow для помощи в решении конкретной проблемы.
Вы никакого free и даже delete или new в программе не делаете. Значит ошибка в том, что структуры менеджера памяти как-то портятся. Это значит, что вы пишите куда-то за границы массива.
Можно попытаться запустить программу в отладчике, или добавить кучу отладочного вывода, чтобы посмотреть, что и как вы портите.
Подозреваю, что ошибка тут:
int mli=index(len,ml),mpi=index(len,mp);
Обратите внимание на второй вызов index. Вы ищите в массиве len значение mp, которое вы нашли в массиве price. Возможно оно возвращает -1 и дальше уже вы пытаетесь что-то делать в векторе по этому индексу, что вряд ли закончится хорошо.