翻遍全网的解答,看了将近一个小时的博客,还是没有解答,直到我即将放弃的时候,
基本翻遍全网关于解决为什么打开文件就弹出debug assert failed 弹窗的问题
仍然得不到解答。
后来精简代码,一行一行的注释,再放开,直到我发现问题的时候,我恭喜自己又一次被自己蠢到了。
写一个博客,以此留念。如果有犯同样错误的,也可以相互借鉴。
写法如下:
FILE* fp = fopen("E:\\test.txt", "w");
if (fp== NULL)
{
perror("fopen");
system("pause");
return 1;
}
fp = NULL;
fclose(fp);
弹窗警告⚠
打开文件fopen 没有问题
那问题出在哪里呢?
FILE* fp = fopen("E:\\test.txt", "w");
if (fp== NULL)
{
perror("fopen");
system("pause");
return 1;
}
fclose(fp);
fp = NULL;
关键问题出错点
请注意对比后两行代码的顺序
先关闭文件指针,然后再将指针设置为空值。
我们再关闭文件的时候,到底做了什么?
官方解释如下:
关闭档案
关闭与流关联的文件并取消关联。
与该流关联的所有内部缓冲区都将与该流取消关联并刷新:将写入所有未写输出缓冲区的内容,并丢弃所有未读输入缓冲区的内容。
即使调用失败,作为参数传递的流也将不再与文件或其缓冲区关联。
个人觉得和之前了解到一些概念有一点像,首先在关闭文件之前,刷新文件,之后关闭文件。文件的指针依旧指向该文件,只是解除了操作关系。最后将该指针的内容设置为空。
这里和释放指针有一点点类似:
free§;
//只是将p和所指向的那块内存取消联系,解除绑定,但是p本身保存的地址并没有改变,只是没有使用权了,那块内存的值也没有变,只是没有办法使用了。
free后,指针指向的内存被释放,但是指针仍然是存在的
此时的指针被称为“迷途指针”,就像迷途的羔羊一样
也称为“空悬指针”“悬浮指针”“野指针”。这个时候要把指针重新初始化为NULL后才能再使用,否则会得到我们不想要的结果。
举一个生活化的例子:
大致就是,男女朋友分手以后解除的是恋爱的关系,也就是指针操作文件的关系,但是这并不影响你可以继续偷偷观察你的前任。大概就是这么个意思吧哈哈哈哈哈
如果先将指针设置为空,再关闭文件,由于指针已经不指向文件,没有办法正常关闭文件。
最后,感谢一下给我启发,想到问题出在哪里的作者和他的博客
参考博客