Как можно исправить ошибку "double free or corruption (out) Aborted"?

Как исправить ошибку при компиляции данного кода на C++?
  • 25 апреля 2024 г. 12:50
Ответы на вопрос 2
Ошибка "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 и дальше уже вы пытаетесь что-то делать в векторе по этому индексу, что вряд ли закончится хорошо.
Похожие вопросы