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