Это звучит натянуто, но на самом деле это Реально.
По сути, я использовал хорошо известный Geeks for Geeks
онлайн-компилятор для отправки кодов C++.
К сожалению, моя отправка не удалась, так как компилятор показал, что мой код не работает должным образом для некоторых тестовых случаев, затем я перепроверил свой код и не обнаружил никаких проблем, поэтому я отправил тот же код, как есть, без изменения ни единого бита (бессознательно), и я я потрясен, увидев, что мой код правильно выполняет все тестовые случаи за это время. Теперь я хочу знать, как это возможно?
Это проблема компилятора или что-то еще?
Я уже проверил построчно оба кода из истории отправки и обнаружил, что оба абсолютно одинаковы, но один принят, а другой отклонен. Насколько мне известно, онлайн-компиляторы снова и снова запускают одни и те же и предопределенные тестовые примеры для конкретной проблемы, когда мы нажимаем кнопку отправки.
В этом вопросе нет ошибок компилятора, тег удален.
Ваш отправленный код, вероятно, имеет неопределенное или неопределенное поведение.
Когда ваш код вызывает такое поведение, существует множество возможных факторов, которые могут привести к тому, что ваш код будет вести себя иначе, чем при предыдущем запуске того же кода.
Например, адреса могут меняться каждый раз, когда вы запускаете программу, благодаря рандомизации адресного пространства (ASLR). Как следствие, доступ к массиву за пределами границ на определенную величину может вызвать сбой страницы в некоторых случайных макетах памяти, но не в других.
Другая возможность заключается в том, что после того, как вы впервые отправили свой код, сторонний сайт, который вы используете, мог обновить свой компилятор до новой версии или этот сайт мог изменить настройки, с которыми компилируется ваш код. Обе возможности могут привести к тому, что компилятор выдаст немного разные инструкции, что изменит поведение вашего кода.
Или, может быть, поведение вашей программы вообще не изменилось. Возможно, сторонний сайт каким-то образом изменил свою тестовую программу, например, изменив ввод для тестирования вашей программы.
Если вы хотите убедиться, что ваш код имеет только одно возможное поведение, вы должны написать свой код соответствующим образом, не делая ничего, что вызывает неопределенное или неопределенное поведение.
Программы C++ могут иметь неопределенное и неопределенное поведение. Первое означает, что выход потенциально может быть любым, а второе означает, что может быть получено несколько разрешенных результатов. Нет причин, по которым программа с одним и тем же входом всегда должна выдавать один и тот же результат. Кроме того, мы, конечно, не знаем, что сайт делает с вашей заявкой. Есть ли основания полагать, что они всегда компилируют одно и то же, тестируют одни и те же тестовые случаи в одной и той же среде и т. д.? В общем, мы не можем этого знать, но это и не удивительно.