Estoy intentando depurar un programa que he escrito. De acuerdo con el depurador, un particular void *
tiene el valor 0x804b008. Me gustaría poder desreferenciar este valor (convertirlo a int *
y obtener su valor).Desreferencia ubicación de memoria arbitraria en C
Recibo un error de segmentación con este código. (El programa con el void *
todavía se está ejecutando en segundo plano por cierto - es 'pausa')
#include <stdio.h>
int main() {
int* pVal = (int *)0x804b008;
printf("%d", *pVal);
}
puedo ver por qué ser capaz de deferencia cualquier punto en la memoria podría ser peligroso y quizás por qué esto no está funcionando .
¡Gracias!
He leído un poco sobre el desarrollo del sistema operativo, así que creo que entiendo de lo que me estás hablando. ¿Está esta memoria virtual ubicada en la RAM, solo asignada a un esquema de direccionamiento diferente o algo más? Gracias de nuevo. EDIT: ¡Respondió mi pregunta antes de que siquiera se la pidiera! – Tyler
La memoria virtual solo significa que, en lo que a usted respecta, al escribir un programa, tiene un buen espacio de memoria contigua. El sistema operativo maneja toda la fragmentación de memoria potencial para usted. –
Gracias. Yo junté tanto. Estaba más interesado en * cómo * se implementa en el nivel del sistema operativo. http://en.wikipedia.org/wiki/Virtual_memory#Page_tables parece ser la forma en que se hace. Gracias – Tyler