Ошибка превышения лимита памяти
trroertro ÐавигаÑиÑ: ÐÐ»Ð°Ð²Ð½Ð°Ñ ÑÑÑаниÑа/СиÑÑема ejudge/ÐÑполÑзование/ÐеÑдикÑÑ ÑеÑÑиÑованиÑ/ÐÑибка пÑевÑÑÐµÐ½Ð¸Ñ Ð»Ð¸Ð¼Ð¸Ñа памÑÑи
ÐнглийÑкое название: Memory Limit Exceeded.
ÐÑибка диагноÑÑиÑÑеÑÑÑ, еÑли в пÑоÑеÑÑе ÑабоÑÑ ÑеÑÑиÑÑÑÑÐ°Ñ Ð¿ÑогÑамма поÑÑебила болÑÑе памÑÑи, Ñем Ñказано в огÑаниÑениÑÑ Ð·Ð°Ð´Ð°Ñи. ÐбоÑнованноÑÑÑ Ð´Ð¸Ð°Ð³Ð½Ð¾ÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑой оÑибки вÑзÑÐ²Ð°ÐµÑ Ð´Ð¸ÑкÑÑÑии (Ñм. далее).
РазнÑе ÑеÑÑиÑÑÑÑие ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ðº огÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи Ð´Ð»Ñ ÑабоÑаÑÑей пÑогÑÐ°Ð¼Ð¼Ñ Ð¿Ð¾-ÑазномÑ. Ð ejudge огÑаниÑение памÑÑи ÑеализÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑÑановки огÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° ÑÐ°Ð·Ð¼ÐµÑ Ð²Ð¸ÑÑÑалÑного адÑеÑного пÑоÑÑÑанÑÑва и ÑÐ°Ð·Ð¼ÐµÑ ÑÑека (Ñм. ulimit). Таким обÑазом, ÑеÑÑиÑÑÐµÐ¼Ð°Ñ Ð¿ÑогÑамма не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑевÑÑиÑÑ ÑÑÑановленнÑе огÑаниÑениÑ.
ÐиагноÑÑиÑование оÑибки пÑевÑÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ памÑÑи в ÑиÑÑеме ejudge ÑабоÑаеÑ, Ñолко еÑли ÑÑÑановлен паÑÑ Ðº ÑдÑÑ Linux. ÐÑли паÑÑ Ð½Ðµ ÑÑÑановлен, пÑевÑÑение огÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ памÑÑи бÑÐ´ÐµÑ Ð´Ð¸Ð°Ð³Ð½Ð¾ÑÑиÑовано как оÑибка вÑемени вÑполнениÑ. ÐÑоме Ñого, ÑиÑÑема ejudge позволÑÐµÑ Ð¾ÑклÑÑиÑÑ Ð´Ð¸Ð°Ð³Ð½Ð¾ÑÑиÑование данной оÑибки даже еÑли паÑÑ Ðº ÑдÑÑ ÑÑÑановлен.
ХоÑÑ Ð´Ð¸Ð°Ð³Ð½Ð¾ÑÑиÑование данной оÑибки Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ ÑÑаÑÑников Ð´Ð»Ñ Ð¾Ñладки Ð¸Ñ ÑеÑений, в болÑÑиÑÑве ÑиÑÑаÑий гÑаниÑа Ð¼ÐµÐ¶Ð´Ñ Ð¾Ñибкой пÑи вÑполнении пÑогÑÐ°Ð¼Ð¼Ñ Ð¸ оÑибкой пÑевÑÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ памÑÑи оказÑваеÑÑÑ Ð¾ÑÐµÐ½Ñ ÑазмÑÑой.
ÐапÑимеÑ, еÑли пÑевÑÑен макÑималÑнÑй ÑÐ°Ð·Ð¼ÐµÑ ÑÑека из-за Ñого, ÑÑо пÑогÑамма воÑла в беÑконеÑнÑÑ ÑекÑÑÑиÑ, Ñо ÑÐ°ÐºÐ°Ñ ÑиÑÑаÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑкоÑее ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº оÑибка пÑи вÑполнении пÑогÑаммÑ. Ðо Ñ Ð´ÑÑгой ÑÑоÑонÑ, еÑли пÑогÑамма попÑÑалаÑÑ Ð²ÑделиÑÑ ÑлиÑком много памÑÑи в ÑÑеке (напÑимеÑ, из-за ÑлиÑком болÑÑого локалÑного маÑÑива), ÑÐ°ÐºÐ°Ñ ÑиÑÑаÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº пÑевÑÑение огÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ памÑÑи. ÐÑÑеÑÑвенно, невозможно пÑоÑÑÑм ÑпоÑобом ÑеÑко ÑазлиÑиÑÑ ÑÑи две ÑиÑÑаÑии.
С дÑÑгой ÑÑоÑонÑ, напÑимеÑ, в ÑзÑке C ÑÑнкÑÐ¸Ñ malloc возвÑаÑÐ°ÐµÑ NULL, еÑли памÑÑÑ Ð²ÑделиÑÑ Ð½Ðµ ÑдалоÑÑ. ÐÑли ÑеÑÑиÑÑÐµÐ¼Ð°Ñ Ð¿ÑогÑамма не пÑовеÑÑÐµÑ ÑезÑлÑÑÐ°Ñ ÑÑнкÑии malloc на NULL и полÑÑÐ°ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð´Ð¾ÑÑÑпа по нÑÐ»ÐµÐ²Ð¾Ð¼Ñ ÑказаÑелÑ, Ñо ÑÑо ÑипиÑÐ½Ð°Ñ Ð¾Ñибка пÑогÑаммиÑÑа и должна ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº оÑибка пÑи вÑполнении пÑогÑаммÑ. РнаобоÑоÑ, пÑогÑамма Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлавливаÑÑ ÑиÑÑаÑии, когда malloc возвÑаÑÐ°ÐµÑ NULL, и модиÑиÑиÑоваÑÑ Ñвое поведение (напÑимеÑ, поÑиÑÑив Ñ ÐµÑ-ÑаблиÑÑ).