Duda con maenjo de memoria en C

c0ira

Wenas a tods y antes de nada thx por la ayuda
Tng que hacer una funcion que copie en la de direccion de memoria que yo le indique un fichero. Uso el comando read y le paso el tamaño del fichero sacandolo con stat y el identificador del fichero sacandolo cn open, cuand lo preparo para lectura, y creo que le paso bn la direccion de memoria dd empieza a copiar pero me casca y no se pq y ya toy un poco desesperado Alguien me puede exar un cable?

Gracias

dr_Rouman

Podías pegar el código para verlo mejor...

Si es demasiado extenso http://pastebin.com/ y lo vemos allí ;)

c0ira

Faltan mx cosas pero para que os agais a la idea de el tipo de datos y de lo que son

char *fichero = malloc(128);
char *memoria = malloc(128);
struct stat buf;

/*fichero es el nombre del fichero que quiero meter en memoria
memoria es una direccion que le meto en hexadec x teclado y que a traves de esa funcion devuelvo un int y q croe q funciona bn que ya la use antes */

df=stat(fichero, &buf);
size_t tamano = (&buf)->st_size;
int idFichero = open(fichero,O_RDONLY);
read(idFichero, (void *) hexaAEntero(memoria), tamano);

int hexaAEntero(char *a){
int p;
sscanf(a,"%p",&p);
return p;
}//hexaAEntero

r2d2rigo

Comprueba que el fichero no es mayor de 128 bytes. Si no, te dara la petada.

c0ira

Pero como no va ser mayor de 128 bytes? Eso es no es muy poco tamaño?

r2d2rigo

128 bytes son 128 caracteres. Si estas leyendo en hexa, con 64 valores que metas te habras comido la memoria.

Btw, antes no habia caido, pero me quieres decir que cojones hace

read(idFichero, (void *) hexaAEntero(memoria), tamano);

Soy yo o estas tratando de almacenar lo que lees en una funcion? Haz en una linea la lectura y en otra la llamada a hexaAEntero:

read(idFichero, (void *)memoria, tamano);
hexaAEntero(memoria);

Aunque tambien tienes que modificar la funcion hexaAEntero, porque lo que tienes dentro es... vamos, raro se queda corto.

Usuarios habituales

  • r2d2rigo
  • c0ira
  • dr_Rouman