Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Почему в разных компиляторах код выводит разные значения? [закрыт]

http://rextester.com/ZZGGK27907 http://rextester.com/IGXLV67756
В данных ссылках один и тот же код. Но отличается для компиляторов C++ и C++11. В C++ ответ выводится верный. А в C++11 выводится просто 0. По идее, C++ и C++11 не должны сильно отличаться.
Почему может выводится разный ответ в одинаковых кодах? И где может быть ошибка?


Ответ

Не сильно вдавался в алгоритмические подробности, но как минимум одно проблемное место нашел:
stack path; for(int index = Q.front().idx; index != -1; ) { ...
Я попробовал прогнать ваш код на указанном наборе входных данных и обнаружил, что к указанному моменту очередь Q оказывается пуста (не углублялся, должно так быть или нет). Соответственно Q.front().idx обращается к первому элементу пустой очереди. В результате возникает неопределенное поведение. А раз оно неопределенное, то, в зависимости от компилятора, программа ведет себя по разному. Как-то вам нужно этот момент корректно обойти или (если он - не то что вы ожидали), починить код до указанного.

Комментариев нет:

Отправить комментарий