【发布时间】:2018-01-14 03:21:56
【问题描述】:
当我们编写 C 程序时,我们会调用 malloc 或 printf。但是我们需要检查每个电话吗?您使用什么准则?
例如
char error_msg[BUFFER_SIZE];
if (fclose(file) == EOF) {
sprintf(error_msg, "Error closing %s\n", filename);
perror(error_msg);
}
【问题讨论】:
-
我不检查
printf,如果失败了,那么你的电脑确实有问题。fprintf我检查,但只有在写操作是必要的情况下,如果是日志,我不检查。malloc& co,我总是检查它们,即使有时这很烦人。 -
你不能这么说。作为一个经验法则,你应该检查所有可能出错的地方——如果是这样的话——当你有一个策略来处理它时。例如,在托管系统上检查
malloc()通常会导致程序终止,因为如果没有足够的内存,您的程序将无法按预期运行。 -
即使在 malloc 失败的情况下,您至少可以预先设置好,以便可以优雅地终止。
-
根据我的经验,
malloc()失败的最常见原因不是堆空间不足,而是请求的内存大小是一个愚蠢的数字 - 通常是因为一些int被指针值覆盖或未初始化。因此,在那里进行检查至少可以阻止腐烂,尽管除了报告问题并退出之外您无能为力。 -
关于调用
fclose()的代码块。以下对sprintf()的调用将更改errno中的值,因此对perror()的调用应该在对sprintf()的调用之前
标签: c error-handling