栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么glibc的fclose(NULL)会导致分段错误而不是返回错误?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么glibc的fclose(NULL)会导致分段错误而不是返回错误?

fclose
要求作为其参数一个
FILE
指针通过获得任一
fopen
,标准流中的一个
stdin
stdout
stderr
,或在一些其它实现定义方式。空指针不是其中之一,因此行为是不确定的,就像是
fclose((FILE*)0xdeadbeef)
这样。 NULL 在C语言中 并不特殊
;除了一个事实,即它保证比较不等于任何有效的指针,它只是像任何其他无效的指针,并使用它调用时的界面你将它传递给文件作为合同的一部分,除了不确定的行为
NULL
具有一定的特殊的意义。

此外,返回错误将是有效的(因为无论如何该行为都是未定义的),但是对于实现来说是有害的,因为它 隐藏了未定义的行为
。调用未定义行为的最佳结果始终是崩溃,因为它会突出显示错误并允许您对其进行修复。的大多数用户

fclose
不会检查错误的返回值,因此我敢打赌大多数人会愚蠢到要传递
NULL
fclose
,而他们不会足够聪明地检查的返回值
fclose
。由于最终的刷新可能会失败,因此人们可能会争辩说人们通常
应该
检查的返回值
fclose
,但是对于仅用于读取而打开的文件,或者如果
fflush
之前被手动调用的文件,则不需要这样做。
fclose
(无论如何这都是一个更聪明的习惯,因为在打开文件的同时更容易处理错误)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号