Foros del Web » Programación para mayores de 30 ;) » C/C++ »

saber valor contenido en direccion de memoria

Estas en el tema de saber valor contenido en direccion de memoria en el foro de C/C++ en Foros del Web. Hola a todos!. Mi pregunta es sencilla, pero no consigo resolverla por mi mismo: Tengo una direccion de memoria, y me gustaria saber el valor ...
  #1 (permalink)  
Antiguo 03/06/2008, 02:56
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 15 años, 11 meses
Puntos: 0
saber valor contenido en direccion de memoria

Hola a todos!.

Mi pregunta es sencilla, pero no consigo resolverla por mi mismo:
Tengo una direccion de memoria, y me gustaria saber el valor que hay almacenado en ella. Alguien me podria decir como puedo averiguarlo?

Es decir, tengo la direccion como un entero (por ejemplo, 1978). y en esa direccion tiene que haber un valor almacenado, al cual me gustaria llegar.

Un saludo, y gracias de antemano.
  #2 (permalink)  
Antiguo 03/06/2008, 03:28
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: saber valor contenido en direccion de memoria

Necesitas una variable de tipo puntero en la que poner la direccion de memoria. Y luego acceder al contenido de dicho puntero con el operador asteristo, o con el operador flecha.
El tipo de puntero depende del tipo de información que haya que recuperar.

Por ejemplo si solo quieres leer un byte de memoria de tipo "unsigned char", el código sería:

Código:
unsigned char * puntero = 1978; /* Las direcciones de memoria normalmente se expresan en hexadecimal. Ej: 0x14ea */

printf( "Valor = %d\n", *puntero );
unsigned char valor = *puntero;
printf( "Valor = %d\n", valor );
Otro ejemplo, si lo que quieres recuperar de memoria es una estructura:
Código:
typedef struct
{
  int a
  long b
} tipoAB;

tipoAB * puntero = 1978;
printf( "ValorA = %d, ValorB=%ld\n", puntero->a, puntero->b );
__________________
Pop & Rock Bands
Pop Music Stars
  #3 (permalink)  
Antiguo 03/06/2008, 03:47
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: saber valor contenido en direccion de memoria

Gracias por responder 00siete,

Sin embargo cuando intento reproducir tu codigo, al compilar me da un warning "differs in levels of indirection from". y si lanzo el programa, me da un error "la memoria no se puede read".

uint16 *puntero;
....
puntero = dfbrd->first_var (esta variable contiene el valor 1978 en forma de uint16);


a partir de esta instruccion, el programa da error y no continua.
he hecho un sizeof(puntero) y me da un resultado de 4. (no se si servira de algo la info, pero ahi queda).

de nuevo, muchas gracias por tu interes :)
  #4 (permalink)  
Antiguo 03/06/2008, 04:11
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: saber valor contenido en direccion de memoria

El warning supongo que es para la instrucción: "puntero = dfbrd->first_var;"
ya que no creo que el campo "first_var;" sea del tipo "uint16 *".
Para quitar el warning puedes hacer un casting:
puntero = (uint16 *)dfbrd->first_var;
o
puntero = (void *)dfbrd->first_var;

En cuanto a lo del error, de que la memoria no se puede leer. Pues es probable que la dirección 1978 no corresponda con ninguna posición de memoria.
¿ De donde ha salido dicho numero ? ¿ Es un valor que has obtenido aplicando el operador & a alguna variable ? ¿ Es el puntero obtenido de un llamada a malloc() ? ...
__________________
Pop & Rock Bands
Pop Music Stars
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:33.