2009-09-26 5 views
1

Я видел много ошибок в ходе моего компьютера, используя жизнь, и многие из них, похоже, были исключениями нарушения доступа, вызывая выход из нечитаемой памяти или 0x00000000/0xFFFFFFFF.Почему так много ошибок «AccessViolationException»?

Какая ошибка программирования вызывает это? намеренно ли программа сбой, когда что-то идет не так?

+0

По какой-либо причине это дает хороший результат голосования? – RCIX

ответ

3

Определенно не «преднамеренно, чтобы программа сработала, когда что-то пошло не так» - они просто назовут свой язык эквивалентом exit (error_code) для этого ... вы не хотите, чтобы случайным образом прыгать где-то в памяти вызывают его сбой.

В основном это означает, что программа пытается прочитать ячейку памяти за пределами диапазона, разрешенного ею операционной системой.

Для этого требуется определенный вид указателя на языке, а адрес памяти в указателе становится плохим. Это может быть вызвано чем-то вроде забывания установить значение указателя как адрес int, на который он указывает, и вместо этого установить его на значение int. Это может быть из-за плохой обработки данных/ввода - вы создаете массив, который может содержать 256 байтов, а затем читать 265 в, и так получилось, что значение указателя находилось в ячейке памяти после массива, поэтому теперь данные, пролитый поверх «конца массива в ячейке памяти, где был указатель, - поэтому в следующий раз, когда вы получите доступ к этому указателю, он заполнен некоторыми случайными данными, но он обрабатывается как адрес памяти. (Выполнение этого целенаправленного взлома называется атакой переполнения буфера).

3

Выделение нулевого указателя (очень распространенная ошибка) может вызвать это на некоторых языках.

+1

Чтобы быть более конкретным, «на любом языке, который не выполняет явные проверки нуля», которые, как правило, почти все не управляемые. –