В вычислительной технике нарушением хранилища называется аппаратная или программная ошибка , которая возникает, когда задача пытается получить доступ к области компьютерного хранилища , к которой ей не разрешен доступ.
Нарушение хранилища может, например, состоять из чтения, записи или освобождения хранилища, не принадлежащего задаче. Распространенный тип нарушения хранилища известен как переполнение буфера стека , когда программа пытается превысить пределы, установленные для ее стека вызовов . Это также может относиться к попытке изменения памяти, «принадлежащей» другому потоку, где есть неполная (или отсутствующая) защита памяти.
Нарушения хранения могут возникать в транзакционных системах, таких как CICS, в ситуациях, когда возможна запись в хранилище, не принадлежащее транзакции; такие нарушения можно сократить, включив такие функции, как защита хранилища и изоляция транзакций .
Нарушения хранения могут быть труднообнаружимы, поскольку программа часто может работать в течение некоторого времени после нарушения, прежде чем произойдет сбой. Например, указатель на освобожденную область памяти может быть сохранен и позже повторно использован, что приведет к ошибке. В результате усилия сосредоточены на обнаружении нарушений по мере их возникновения, а не позже, когда проблема будет обнаружена.
В таких системах, как CICS, нарушения хранения иногда обнаруживаются ( ядром CICS ) с помощью «сигнатур», которые можно протестировать, чтобы увидеть, были ли они наложены.
Альтернативная библиотека времени выполнения может использоваться для лучшего обнаружения нарушений хранилища, но за счет дополнительных накладных расходов. [1] Некоторые языки программирования используют проверку границ программного обеспечения для предотвращения таких случаев.
Некоторые программы отладки программ также обнаруживают нарушения во время тестирования.