调试断言在fwrite.cpp中失败

时间:2018-01-26 10:39:19

标签: c++ c exception fopen fwrite

对于任何缺乏知识而提前抱歉,但我是一名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 +(授予读取,写入和创建文件权限),所以我认为它失败的唯一原因是操作系统级别的无效权限。程序来创建文件?

我目前无法访问该机器来查看。在我获得访问权限之前尝试累积可能的问题。

2 个答案:

答案 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;
}

希望它有所帮助: - )