¿Es seguro leer desde una dirección aleatoria? Sé que escribir es un comportamiento indefinido, pero ¿qué hay de leer solo?
Bueno, en muchos depuradores visuales, puedo ver el contenido de la memoria en una dirección arbitraria. ¿Cómo se hace esto?
Dado que el comportamiento no está definido, la respuesta no está definida o, como mínimo, es errática.
Si tiene suerte y la dirección aleatoria está dentro de los límites de la memoria de su programa, lo más probable es que esté bien para leer y solo obtendrá basura aleatoria.
Si está fuera del alcance (es decir, 0x0/NULL), lo más probable es que obtenga una falla de segmentación (aunque nuevamente, esto no está garantizado) que terminaría su programa; si lo considera "seguro", entonces sí , De otra manera no.
No, no es seguro. Incluso si no le importa que el valor se defina o sea preciso, existe una E/S asignada a la memoria, por lo que una dirección aleatoria podría interactuar con el hardware periférico. Hice eso en los días anteriores a la memoria protegida, y sí, puede derribar el sistema.
Hoy en día, dependiendo de su sistema, esperaría ver una falla de segmento para las direcciones fuera de su espacio de proceso. Sin esa protección, una mala aplicación podría acceder a datos valiosos, como contraseñas, información de tarjetas de crédito, etc. cuando se usa en una buena aplicación.
Además, es probable que las direcciones que ve en el depurador no sean direcciones físicas reales. En cambio, probablemente solo vea direcciones de memoria virtual.