Eroare care depășește limita memoriei

Eroarea este diagnosticată dacă programul de testare a consumat mai multă memorie în timpul operației decât cea indicată în constrângerile sarcinii. Valabilitatea diagnosticării acestei erori provoacă discuții (vezi mai jos).







Diagnosticarea unei erori care depășește limita de memorie din sistemul ejudge funcționează numai dacă este instalat un patch la kernel-ul Linux. Dacă plasturele nu este setat, depășirea limitei de memorie va fi diagnosticată ca o eroare de execuție. În plus, sistemul ejudge vă permite să dezactivați diagnosticarea acestei erori chiar dacă este instalat patch-ul kernel-ului.

Deși diagnosticarea acestei erori poate fi utilă participanților pentru depanarea soluțiilor lor, în majoritatea situațiilor, limita dintre eroarea de executare a programului și eroarea depășirii limitei memoriei este foarte neclară.







De exemplu, dacă mărimea maximă a stivei este depășită datorită faptului că programul a intrat în recursiune infinită, atunci această situație ar trebui mai degrabă să fie considerată o eroare la executarea programului. Dar, pe de altă parte, dacă programul a încercat să aloce prea multă memorie pe stivă (de exemplu, datorită unei serii locale prea mari), această situație ar trebui considerată ca depășind limita de memorie. În mod firesc, este imposibil să se facă o distincție clară între aceste două situații într-un mod simplu.

Pe de altă parte, de exemplu, în C, malloc returnează NULL dacă memoria nu poate fi alocată. Dacă programul testat nu verifică rezultatul funcției malloc pe NULL și primește o eroare de acces pe indicatorul nul, atunci aceasta este o eroare tipică a programatorului și ar trebui considerată o eroare la execuția programului. În schimb, programul poate captura situații când malloc returnează NULL și modifică comportamentul său (de exemplu, prin eliminarea tabelului hash).







Articole similare

Trimiteți-le prietenilor: