• Viernes 8 de Noviembre de 2024, 20:03

Autor Tema:  Asignar Direccion A Puntero  (Leído 1988 veces)

martinlopez

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Asignar Direccion A Puntero
« en: Jueves 12 de Abril de 2007, 13:38 »
0
Estoy con un programa que guarda un array de punteros con las direcciones qeu devuelve la sentencia malloc()

lo que quiero es que cuando pida por teclado una direccion de memoria, si es una de las del array la libero con free y sino no hago nada.

El problema es qeu la direccion introducida es char * y el puntero a mi entender tiene que ser de la forma 0x9999999 y no sé como convertir de cadena a dirección de memoria.

Ayuda por favor. Saludos.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Asignar Direccion A Puntero
« Respuesta #1 en: Jueves 12 de Abril de 2007, 14:10 »
0
una direccion de memoria en hexa es un numero, asi que supongo que con la funcion atoi tendria que funcionar.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Asignar Direccion A Puntero
« Respuesta #2 en: Jueves 12 de Abril de 2007, 14:21 »
0
Tenes que calcular el valor entero de esa cadena, de atras hacia adelante mientras sea un numero o una letra menor a G. Cada cifra se multiplicara por 16 a la X que se incrementara cada vez que pases al caracter anterior.

Teniendo 0x345 por ejemplo harias:

5 * 16^0=5
+ 4 * 16^1=64
+ 3 * 16^2=768
-------------------
837 decimal que equivalente a 0x345. Por lo tanto esa misma tarea la tenes que hacer en tu programa y podras obtener desde el teclado la direccion que quieras liberar en hexadecimal.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Asignar Direccion A Puntero
« Respuesta #3 en: Jueves 12 de Abril de 2007, 14:26 »
0
Cita de: "AnioN"
una direccion de memoria en hexa es un numero, asi que supongo que con la funcion atoi tendria que funcionar.
No exactamente ya que es para numeros en base 10, podes probar esto por ejemplo:

Código: Text
  1.  
  2. printf("%d\r\n", atoi("0x3BC"));
  3. printf("%d\r\n", atoi("3BC"));
  4.  
  5.  

El primero devuelve 0, podriamos pensar que con sacar el 0x funcionaria pero el segundo solo devuelve 3, no entiende las letras.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

martinlopez

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Asignar Direccion A Puntero
« Respuesta #4 en: Jueves 12 de Abril de 2007, 15:23 »
0
Cita de: "Eternal Idol"
837 decimal que equivalente a 0x345. Por lo tanto esa misma tarea la tenes que hacer en tu programa y podras obtener desde el teclado la direccion que quieras liberar en hexadecimal.
Perfecto, esa es una tarea facil pero cuando tenga el 837 como asigno la dirección al puntero ya que si no estoy equivocado las direcciones empiezan por 0x y si tengo en 837 en la variable direccion como la asigno?
Gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Asignar Direccion A Puntero
« Respuesta #5 en: Jueves 12 de Abril de 2007, 16:06 »
0
Cita de: "martinlopez"
Perfecto, esa es una tarea facil pero cuando tenga el 837 como asigno la dirección al puntero ya que si no estoy equivocado las direcciones empiezan por 0x y si tengo en 837 en la variable direccion como la asigno?
Gracias.
Es una tarea facil siempre, si ves que tenes la x (de 0xABC por ejemplo) ahi mismo terminas el calculo del numero entero. Ese numero entero se corresponde exactamente con la direccion en hexadecimal entrada por teclado: son diferentes bases para expresar el mismo valor, en este caso una direccion en memoria.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Asignar Direccion A Puntero
« Respuesta #6 en: Jueves 12 de Abril de 2007, 16:42 »
0
pregunta, si tengo una direccion de memoria expresada en decimal y la quiero comparar con otra en hexa, no hay problema no?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Asignar Direccion A Puntero
« Respuesta #7 en: Jueves 12 de Abril de 2007, 17:00 »
0
Cita de: "AnioN"
pregunta, si tengo una direccion de memoria expresada en decimal y la quiero comparar con otra en hexa, no hay problema no?
Si las tenes en un numero son exactamente iguales si las tenes en una cadena ASCII tenes que pasarlas a numero.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.