Блог пользователя yeputons

Автор yeputons, 10 лет назад, По-русски

Есть довольно известная проблема с компиляцией нативных решений под Windows: если выделяются слишком большие статические массивы (или возникает какая-нибудь похожая проблема в процессе запуска), то проверяющая система может пометить посылку как "убившую систему" и не выдать участнику никакого вердикта. Например, раньше в системе Testsys это вызывало вердикт Failed To Test (и никакой информации участнику), на Codeforces — отказ тестирования, в PCMS2 и сейчас есть проблемы. Пример кода:

int data[(int)2.1e9 / sizeof(int)];
main() {}

Думаю, что всем мало-мальски знакомым с запуском процессов Windows очевидно, что с этим делать — попробовать запустить при компиляции и, возможно, выдать Compilation Error с отчётом. Похоже, что всем, кроме меня, было лень этим заняться и вот результат моих трудов, уже трудится на Codeforces. Если у вас тоже есть своя проверяющая система, вы можете запускать это приложение (или же просто скопировать код из него) после компилятора для проверки exe на корректность. В случае чего можно выдать сообщение пользователю с подсказкой "проверьте, пожалуйста, на большие массивы".

При использовании testexe никакой пользовательский код не запускается, процесс полностью замораживается операционной системой после успешной загрузки и еще до начала выполнения каких-либо инструкций (параметр CREATE_SUSPENDED).

  • Проголосовать: нравится
  • +107
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится +43 Проголосовать: не нравится

Да, теперь вердикт такой:

Ошибка выполнения [COMPILATION_ERROR]
Can't compile file:
Compiled file is not a valid executable. Probably, the source tried to use too large static array(s).
=====
Использовано: 0 мс, 0 КБ