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位
答案 0 :(得分:6)
您为缓冲区分配了350880个字节但尝试读取350880个短路。尝试
bufferPointer = malloc(350880 * sizeof *bufferPointer);
(请注意,生成malloc并不是必需的,因为它可以隐藏错误而不受欢迎。)
你还应该检查你的malloc,fopen和fread调用是否有错误。
答案 1 :(得分:2)
您应首先使用bufferPointer
为malloc
分配足够的内存量。然后,您可以使用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
来创建文件?如果没有,你所读的内容可能毫无意义。