Вы, вероятно, пытаетесь получить доступ к памяти, к которой ваша программа не имеет доступа, и "крах" - это просто система, предотвращающая его уничтожение вирусом (вами :)).
Вот небольшой код Linuxскомпилировано с gcc:
#include <stdio.h>
int b;
int main() {
char *ptr = (char*)&b;
ptr -= 2368;
int i;
for( i = 0; i < 3984; i++){
printf( "%d: %c\n", i, ptr[i]);
}
printf( "\n");
return 0;
}
Если вы попытаетесь получить доступ к -2369
байтам, вы получите ошибку сегментации (нарушение доступа).Если вы попытаетесь получить доступ к более чем 3984-му байту (3983-й, включая «нулевой байт»), вы получите ту же ошибку (вероятно, это размер страницы, который можно использовать для приложений).
char *ptr = (char*)&main;
ptr -= 999;
int i;
for( i = 0; i < 3763; i++){
printf( "%c", ptr[i]);
}
В моей системе есть адрес b: 0x600970
И адрес основного: 0x4004e4
Таким образом, вы можете видеть, что у вас есть доступ к различным областям действияпамяти, но вы ограничены только этим.