Realmente estoy rompiéndome la cabeza desde hace unos 2 dias...
Al momento de guardar datos en un archivo escribo los datos de 2 bytes en 2 bytes.
Todo bien pero llega un momento en que el programa no guarda la información que debe de guardar, sin embargo si mando a imprimir lo que esta guardando esta información si es correcta, pero no la que se guarda en el archivo.
Código
if(file) { debug("-primos[%i]",primos[offset]->valor,primos[offset]->bytes,offset); }
Mando a llamar a una función debug para ver que es lo que se esta guardando, esta función me imprime el contenido de la memoria sin afectarlo...
Código
void debug(char *s,unsigned char *ptr,unsigned int l,...) { va_list args; int i = 0; char *buffer; while(ptr && i < l) { } }
Aquí lo importante es notar que llamo a fwrite para escribir en el archivo abierto con la opcion "a+"
Código
debug("-primos[%i]",primos[offset]->valor,primos[offset]->bytes,offset);
La posición de memoria que se guarda es: primos[offset]->valor y la cantidad de bytes que se guardan con fwrite y se imprimen con debug es primos[offset]->bytes que para el ejemplo dado vale 2
La salida del programa va mas o menos asi...
Código:
-primos[54]: 0x567fd0 0101
-primos[55]: 0x567ef0 0701
-primos[56]: 0x567f10 0d01
-primos[57]: 0x567ff0 0f01
-primos[58]: 0x567f60 1501
-primos[59]: 0x567e60 1901
-primos[60]: 0x568000 1b01
-primos[61]: 0x567f20 2501
-primos[62]: 0x567f90 3301
-primos[63]: 0x568010 3701
-primos[64]: 0x568020 3901
-primos[65]: 0x567e80 3d01
-primos[66]: 0x567f40 4b01
-primos[67]: 0x567f50 5101
-primos[68]: 0x568030 5b01
...
y donde se presenta el problema es la siguiente:
Código:
-primos[372]: 0x568520 f509
-primos[373]: 0x568560 f709
-primos[374]: 0x5682c0 fd09
-primos[375]: 0x5683f0 130a
-primos[376]: 0x5682b0 1f0a
-primos[377]: 0x568570 210a
-primos[378]: 0x5681e0 310a
-primos[379]: 0x568390 390a
-primos[380]: 0x5683e0 3d0a
-primos[381]: 0x5681f0 490a
-primos[382]: 0x568330 570a
-primos[383]: 0x5683a0 610a
...
¿Nada anormal? Claro esa salida esta bien, el problema esta al guardar el archivo en ese ultimo segmento queda asi (Salida hexadecimal)
Código:
F509F709FD09130D0A1F0D0A210D0A310D0A390D0A3D0D0A490D0A570D0A610D0A630D0A670D0A6F0D0A750D0A7B0D0A7F0D0A810D0A850D0A8B0D0A930D0A970D0A990D0A9F0D0AA90D0AAB0D0AB50D0ABD0D0AC10D0ACF0D0AD90D0AE50D0AE70D0AED0D0AF10D0AF30D0A030B110B150B1B0B
Ahora que lo veo Noto un recurrente 0D y no tengo ni idea de donde sale, el detalle no veo error en donde se guarda el archivo repito:
Código
debug("-primos[%i]",primos[offset]->valor,primos[offset]->bytes,offset);
En teoría lo que se muestra en la salida estándar y en el archivo creado debería de ser lo mismo primos[offset]->valor
Si a alguien le a pasado algo similar o de plano ve un error que yo no veo por favor avíseme.
No creo que sa detalle del sistema, el error se me presenta tanto en FreeBSD y en Windows