Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未定义的行为fopen、fclose_C++_C_File_Fopen_Fclose - Fatal编程技术网

C++ 未定义的行为fopen、fclose

C++ 未定义的行为fopen、fclose,c++,c,file,fopen,fclose,C++,C,File,Fopen,Fclose,以下代码会导致未定义的行为吗 FILE *fp; fopen_s(&fp, "abc.bin", "rb"); fclose(fp); fclose(fp); // accidentally closed an already closed file. 我知道对已经释放的数组调用free会导致UB。因此我问 引用自曼恩fclose: 如果流参数是非法指针,或者是已传递给先前调用fclose()的描述符,则fclose()的行为未定义 是的,这是未定义的行为。这当然是未定义的行为。在难以

以下代码会导致未定义的行为吗

FILE *fp;
fopen_s(&fp, "abc.bin", "rb");
fclose(fp);
fclose(fp); // accidentally closed an already closed file.

我知道对已经释放的数组调用free会导致UB。因此我问

引用自
曼恩fclose

如果流参数是非法指针,或者是已传递给先前调用fclose()的描述符,则fclose()的行为未定义


是的,这是未定义的行为。

这当然是未定义的行为。在难以跟踪的复杂情况下,就像
free()
一样,如果在声明点将指针设置为
NULL
,在关闭或释放后,可以在
fclose()
free()之前检查它
调用以避免很多悲伤。@WeatherVane:但不幸的是,与
free
不同的是,使用
NULL
指针调用
fclose
并没有很好的定义。我建议在
free
之前“检查”
NULL
是件坏事。在调用
fclose
之前检查
NULL
绝对是一件好事。另请参见duplicate@MatsPetersson如果(!nullptr==fp)fclose(fp)如何?POSIX还说UB:同意。一个实现可以总是
new/malloc
fopen(
)中的
文件
fclose()
中删除/释放它,或者它可以使用私有缓存,这两者都是合法的。调用方在将
文件*
指针传递到
fclose()
后,不应对其有效性做出任何假设,只需将其设为NULL并移动它即可。为什么会显示stream参数?不使用流here@ShafikYaghmourISO C11草案N1570,7.21.3 PAR。4:
关闭关联文件(包括标准文本流)后,指向文件对象的指针的值是不确定的。