调试断言在fread()失败

时间:2012-11-13 05:35:12

标签: c

test.bin的大小为7,01,760字节。我试图在缓冲区bufferPointer中将此文件中的日期读作“short”。

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

我在fread()时遇到Debug Assertion Failed。为什么?

MSVC2010,Windows-7-32位

4 个答案:

答案 0 :(得分:6)

您为缓冲区分配了350880个字节但尝试读取350880个短路。尝试

bufferPointer = malloc(350880 * sizeof *bufferPointer);

(请注意,生成malloc并不是必需的,因为它可以隐藏错误而不受欢迎。)

你还应该检查你的malloc,fopen和fread调用是否有错误。

答案 1 :(得分:2)

您应首先使用bufferPointermalloc分配足够的内存量。然后,您可以使用fread从该文件中读取该缓冲区。

答案 2 :(得分:1)

sgar91是对的。试试吧:

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);

答案 3 :(得分:1)

试试这个

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

这里很少有东西

1)您不能以这种方式直接使用指针。要么像上面那样静态分配内存,要么使用malloc动态分配

2)字符串“test.bin”的开头有一个空格。删除前导空格。

3)即使上述情况有效,也可能无法给出有意义的结果。 fread读取由fwrite编写的内容。即使用fwrite编写short来创建文件?如果没有,你所读的内容可能毫无意义。