对于任何缺乏知识而提前抱歉,但我是一名C#开发人员试图查看C问题。
客户在新机器上安装了一个软件,该机器在其他机器上运行时没有任何问题。
他们收到错误:
Debug Asertion Failed!
Program: C:\MyDirectory\MyDll.dll
File: minkernel\crts\ucrt\src\appcrt\studio\fwrite.cpp
Line: 33
Expression: stream != nullptr
有问题的FOpen正在以w +权利开放,但显然失败了,这就是FClose抛出此异常的原因。我知道在尝试FClose之前应该对指针进行空检查,但稍后会修复。
FOpen只指定文件名,因此应在当前工作目录中创建。
因为FOpen失败并且尝试使用w +(授予读取,写入和创建文件权限),所以我认为它失败的唯一原因是操作系统级别的无效权限。程序来创建文件?
我目前无法访问该机器来查看。在我获得访问权限之前尝试累积可能的问题。
答案 0 :(得分:1)
检查此功能的最佳方式是 - 打印errno
。
我们通常如何做到这一点?每当我们在它之后立即使用fopen
时,我们会检查它返回的值。如果是NULL
,我们可以查看errno
。 (这里的链接有一个部分示例,也显示了这一点。)
当fopen失败时,它会设置errno
以指示错误。原因可能是从访问权限到文件不存在的任何内容。
Here列举了fopen
失败的原因。 (你问的是失败的原因)
答案 1 :(得分:0)
很多事情都会导致fopen
失败,所以很难说。然而,不足的特权是一个很常见的原因。要找出真正的原因,您可以使用操作系统提供的错误消息,您可以按如下方式获取:
#include <errno.h>
....
char* filename = "example.txt";
fp = fopen (filename,"w+");
if (!fp) {
fprintf(stderr, "error opening %s: %s", filename, strerror(errno));
return;
}
希望它有所帮助: - )