Я столкнулся с этой проблемой при изучении операционной системы, и меня действительно интересует, как операционная система определяет, выходит ли индекс массива за пределы допустимого диапазона, и, следовательно, выдает ошибку сегментации?
Приведенный выше код абсолютно выдаст ошибку сегментации, поскольку ptr0 не выделяется никакой памяти.
Но если добавить одну строку, все изменится.
Код: Выделить всё
int main(){
char* ptr0;
char* ptr1 = ptr0;
ptr0[0] = 1;
}
Этот код не вызовет никаких ошибок, даже если вы измените ptr0[0] на ptr0[1000], он все равно не вызовет ошибок сегментации.
Я не знаю, почему линия имеет такую силу
Я пытался разобрать эти коды, но нашел мало информации.
Может ли кто-нибудь объяснить мне это с точки зрения распределения памяти? спасибо большое.
Подробнее здесь:
https://stackoverflow.com/questions/692 ... fault-in-c