Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Maik33 en 17 Octubre 2012, 14:31 pm



Título: Direcciones de memoria
Publicado por: Maik33 en 17 Octubre 2012, 14:31 pm
Hola, tengo un problema con las direcciones de memoria en C. Tengo que guardar en un fichero varias direcciones de memoria, de enteros por ejemplo. Esto no me produce ningun problema. El problema lo tengo al intentar leerlos.

Este es el codigo de prueba:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  int n;
  6.  int *p;
  7.  FILE *f;
  8.  n=10;
  9.  f=fopen("mem.txt","w");
  10.  fprintf(f,"%x",&n);
  11.  fclose(f);
  12.  f=fopen("mem.txt","r");
  13.  fscanf(f,"%x",p);
  14.  fclose(f);
  15. }

compila bien pero al ejecutar me da violacion del segmento.

Tambien he intentado los mismo pero con arrays de char, y el mismo problema:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  int n;
  6.  char mem[20];
  7.  int *p;
  8.  n=10;
  9.  sfprintf(mem,"%x",&n);
  10.  sscanf(mem,"%x",p);
  11. }

Alguien sabe que hago mal, o como se hace?
He buscado en google pero todo lo que encontre es teoria sobre punteros que ya se (creo).
Gracias.


Título: Re: Direcciones de memoria
Publicado por: xiruko en 17 Octubre 2012, 14:35 pm
c+especificadores+formato (http://altamiraweb.net/especificadores-de-formato-en-c) y busca por puntero o direccion de memoria, veras que el que se usa no es %x.

si despues de esto te sigue fallando comentalo y probaremos otra cosa.

un saludo!


Título: Re: Direcciones de memoria
Publicado por: Maik33 en 17 Octubre 2012, 14:40 pm
Ya habia probado esa manera

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  int n;
  6.  char mem[20];
  7.  int *p;
  8.  FILE *f;
  9.  n=10;
  10.  f=fopen("mem.txt","w");
  11.  fprintf(f,"%p",&n);
  12.  fclose(f);
  13.  f=fopen("mem.txt","r");
  14.  fscanf(f,"%p",p);
  15.  fclose(f);
  16. }

pero lo mismo, violacion del segmento.


Título: Re: Direcciones de memoria
Publicado por: xiruko en 17 Octubre 2012, 14:45 pm
prueba asi:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  
  6. int n, *p;
  7. FILE *f;
  8.  
  9. n=10;
  10. f=fopen("mem.txt","w");
  11. fprintf(f,"%p",&n);
  12. fclose(f);
  13.  
  14. f=fopen("mem.txt","r");
  15. fscanf(f,"%p",&p); // aqui te faltaba el &
  16. fclose(f);
  17. printf("%d\n", *p); // aqui se imprime el numero 10
  18.  
  19. return 0;
  20. }

un saludo!


Título: Re: Direcciones de memoria
Publicado por: Maik33 en 17 Octubre 2012, 14:48 pm
Gracias, ahora si.
Que fallo mas tonto.
Gracias por todo.