2011-03-16 70 views
0

我通过fread()有一个错误的原因和它说:C++:fread()导致断言错误?

File: f:\ dd\vctools\ crt_bld\ self_x86\ crt\ src\fread.c 
Line: 102 
Expression: (stream != NULL) 
For information on how your program can cause an assertion 
failure, see the Visual C++ documentation on asserts. 
(Press Retry to debug the application) 

我该怎么办?我的程序中已经包含<stdio.h>。我目前正在使用Visual C++ MFC开发我的项目。

+0

Bertrand是有点正确,虽然不帮助:)因为你不提供任何上下文,我们可以确认什么是断言。 [断言不坏](http://pragprog.com/the-pragmatic-programmer/extracts/tips)。 – sehe 2011-03-16 13:05:43

+0

你的fopen()调用失败,你忘了检查。 – 2011-03-16 13:50:31

回答

6

Expression: (stream != NULL)解释一切。

您正在将NULL流传递给fread,您不应该这样做。

+0

是的。检查您的代码,并查看您称为“fread(...)”的位置。看看这个参考资料,特别是这个例子:http://cplusplus.com/reference/clibrary/cstdio/fread/,试着找出这段代码和你的代码的区别。示例中的“pFile”是您遇到问题的地方。 – AudioDroid 2011-03-16 13:17:17

1

您是否验证过您有适当的FILE对象发送给fread?在使用它之前尝试检查它是否为空。另外请查看关于声明的文档,这不是关于您包含或不包含哪些文件。这是一个运行时错误。

1

功能fread()需要作为一个参数一个FILE*

size_t __cdecl fread(
    void *buffer, 
    size_t elementSize, 
    size_t count, 
    FILE *stream 
) 

FILE*您要发送为NULL。你应该调试你的程序并找出原因。

你可以找到你的这些信息,以同样的方式我做了,在您的电脑打开文件f:\ dd\vctools\ crt_bld\ self_x86\ crt\ src\fread.c并期待它做什么就行102

1

您是否尝试过消息的(Press Retry to debug the application)部分。

如果你输入调试器,你可能会在assert()中结束,并且可以检查调用堆栈以查找调用fread的来源。然后找出为什么FILE *在那里是空的!也许呼吁失败的电话?