Afirmación de depuración fallida en fread ()

El tamaño del test.bin es 7,01,760 bytes. Estoy intentando leer la fecha de este archivo como “corta” en un buffer bufferPointer.

short * bufferPointer=NULL; // ==> ANSWER WAS ADDING: bufferPointer = ( short*)malloc(350880); <== FILE *fp=fopen(" test.bin","rb"); fread(bufferPointer,sizeof(short),350880 ,fp); fclose(fp); 

Estoy recibiendo error en la afirmación de depuración en fread (). ¿Por qué?

MSVC2010, Windows-7-32 bit

Primero debe asignar una cantidad suficiente de memoria al bufferPointer utilizando malloc . Luego puedes usar fread para leer del archivo en ese búfer.

Usted asignó 350880 bytes para su búfer, pero trató de leer 350880 cortos. Tratar

 bufferPointer = malloc(350880 * sizeof *bufferPointer); 

(Tenga en cuenta que el casting de malloc no es necesario, y está mal visto porque puede ocultar errores).

También debe verificar si hay errores en sus llamadas a malloc, fopen y fread.

sgar91 es correcto Sólo inténtalo:

 short * bufferPointer = (short *)malloc(350880*sizeof(short)); if (bufferPointer == NULL) { // TODO: error handling } FILE *fp = fopen("test.bin", "rb"); if (fp == NULL) { // TODO: error handling } fread(bufferPointer, sizeof(short), 350880, fp); fclose(fp); 

Prueba esto

 short bufferPointer[350880]; FILE *fp=fopen("test.bin","rb"); fread(bufferPointer,sizeof(short),350880 ,fp); fclose(fp); 

Pocas cosas aqui

1) No puede usar un puntero directamente de esta manera. Asigne memoria estática como arriba o use malloc para asignar dinámicamente

2) Hay un espacio al principio en la cadena “test.bin”. Retire el espacio inicial.

3) Incluso si lo anterior funciona, puede que no le dé resultados significativos. fread lee cosas que han sido escritas por fwrite . Es decir, fue la creación del archivo utilizando fwrite escribir s short ? Si no, lo que lees puede no tener sentido.