首页 > 试题广场 >

重复多次 fclose 一个打开过一次的 FILE *fp

[单选题]
重复多次 fclose 一个打开过一次的 FILE *fp 指针会有什么结果?
  • 导致文件描述符结构中指针指向的内存被重复释放,进而导致一些不可预期的异常
  • 不会出现异常,释放一个已经释放的指针,系统会自动忽略
  • 无法编译通过
  • 以上答案都不正确
最佳答案,没有之一: fclose是一个函数名,功能是关闭一个流。使用fclose()函数就可以把 缓冲区 内最后剩余的数据输出到内核缓冲区,并释放 文件指针 和有关的缓冲区。 函数原型:int fclose( FILE *fp ).
一次正常的fclose会争取释放FILE指针的相关内容。再次fclose释放已经释放掉了的FILE指针,所以会出错
发表于 2015-08-26 15:56:39 回复(2)
原来函数fclose()不自己判断是否null
发表于 2015-11-23 16:13:40 回复(0)
fclose会释放文件指针,并释放相应的缓冲区,再一次fclose,就会再释放文件指针,此时已经没有这个文件指针了,会出错
发表于 2021-03-08 10:59:45 回复(0)
解释一下为什么不选C:  这里再次释放,程序不一定是会出现异常的;因为释放的指针不一定会被占用。
发表于 2020-07-04 16:21:56 回复(1)
感谢讨论区,加深一下印象:fclose()是将缓冲区内容放到内核缓冲区,并将FILE指针释放,重复释放一个指针会导致出错
发表于 2022-04-20 10:57:08 回复(1)

重复多次fclose一个打开过一次的FILE *fp指针会导致未定义行为。

在C语言中,fclose函数用于关闭文件流,释放与之关联的资源。当你调用fclose时,会将文件缓冲区的内容写入到磁盘中,并清空缓冲区。如果你试图再次关闭已经关闭的文件流,那么就会发生未定义行为,因为文件流已经被关闭并且资源已经被释放,再次调用fclose函数就会导致错误的结果。

发表于 2023-10-30 17:02:34 回复(0)
fclose 是  delete

发表于 2019-11-25 10:55:48 回复(0)
怎么还有不自己判断要释放的指针是否为空的函数,真的low
发表于 2018-02-23 15:22:36 回复(0)
不清楚fclose什么情况,但是用close重复关闭到目前为止没有遇见过问题。编写守护进程的时候为了摆脱某些文件对进程的控制,在第二次关闭子进程后一般会进行如下操作
  1. for (int i = 0; i < FILENO; i++)
  2.     close(i);
已关闭所有文件影响,这里面难免会有一些已经关闭的文件。到目前为止没遇见过问题。至于fclose与close区别以及这样写是不是真的也很出错只是没有预见到……就要等有大佬出来解释了。
发表于 2017-12-26 10:04:08 回复(0)
为什么不能选C?
发表于 2016-12-29 12:54:35 回复(3)

在实际情况下,对已关闭的文件指针调用fclose可能会导致程序崩溃、内存错误或其他未定义的行为。这是因为文件指针已经失效,它不再指向有效的文件对象,因此对其进行操作是不可预测的。

因此,为了避免这种情况发生,应该确保每个fclose调用只对应一个打开的文件指针,并且每个打开的文件指针只被关闭一次。这样可以确保正确释放文件资源,并避免不必要的错误。

发表于 2023-06-13 13:43:07 回复(0)
fclose后是不会自己把文件指针置空。。。。。。。
发表于 2022-09-06 10:32:02 回复(0)

c为什么不对啊?

发表于 2019-06-06 08:30:28 回复(0)
最佳答案,没有之一: fclose是一个函数名,功能是关闭一个流。使用fclose()函数就可以把 缓冲区 内最后剩余的数据输出到内核缓冲区,并释放 文件指针 和有关的缓冲区。 函数原型:int fclose( FILE *fp ). 一次正常的fclose会争取释放FILE指针的相关内容。再次fclose释放已经释放掉了的FILE指针,所以会出错
发表于 2018-12-02 14:02:28 回复(0)
记忆一下:使用fclose()函数可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。其函数原型:int fclose(FlLE* fp)。

一次正常的fclose会争取释放FILE指针的相关内容。再次fclose释放已经释放掉了的FILE指针,因此会出错。
发表于 2018-09-12 14:59:13 回复(0)
再次释放,已经被释放的指针!
发表于 2018-02-02 22:55:54 回复(0)
再次释放已经  被释放的指针
发表于 2016-09-05 21:12:19 回复(0)
A

发表于 2015-01-11 16:10:51 回复(0)