Conversation
Скорее всего, эта ошибка уже давно параллельно исправлена в ветке v3.4.
Исправления: • Временно повышен порог допустимой памяти для случайных тестов, после вливания master в v3.4 следует всё вернуть обратно и отладить. • На стадии LowLevelRASL устранено избыточное копирование. • При генерации кода на C++ строки не копятся в памяти, а сразу же выписываются в целевой файл. • В заголовке отладочного дампа при недостатке памяти указывается текущее её потребление.
|
@shkarupa, проблема была в работе с пустыми STL-векторами — индекс 0 выходил за пределы контейнера. В старых версиях, например, было new_table->external_memory.resize(fixed_part.external_size);
read = fread(&new_table->external_memory[0], 1, fixed_part.external_size);и когда величина Однако, выход индекса за границы контейнера — это неопределённое поведение, Стандарт разрешает в этом случае происходить всему, чему угодно. Не только возвращать неопределённую ссылку, но и аварийно завершать программу, например, при помощи утверждения в отладочном режиме. В итоге пришлось поправить код так, чтобы избегать обращений к неопределённым элементам у пустых векторов. Попутно нашлось несколько других ошибок. Проблема с |
Версия GCC — 15.2.1. |
|
Большое спасибо, @shkarupa! В файле на и запустите тест снова. Когда отладчик попросит Вас ввести команду, введите Хотя я догадываюсь, где ошибка (строчка 872), будет лучше предоставить более подробную диагностику. |
|
@shkarupa, выслал Вам приглашение. Может, тогда Вы сделаете ревью коммита, чтобы его можно было слить? |
|
Ошибка до коммита 0271b79: Все ошибки были исправлены. Последний коммит поставил жирную точку в этом пулл-реквесте. |
|
Всё верно, ошибка была в строке 872 файла В остальных местах обращения к методам |
fgets().