编程中的好习惯,可能比某些刁钻的技巧来的更有意义。
在指针释放之后,给该指针赋值NULL,是一个好习惯。
但释放了文件描述符之后, 是否也该赋值为0, 或者-1呢?
eRv fun()
{
int fd1 = -1;
int fd2 = -1;
fd1 = open(...);
// N 行代码
close(fd);
// 100 行代码, 至少在一个屏幕内不能看到完整的代码。。。
...
fd2 = open();
// 哦, 我可能已经忘记了是否已经释放了...而我可能又想去操作这个文件。。。
read(fd1, ...);
/* 但事实上, 这个时候, fd2 = fd1的,假如没有其他的文件描述符被使用。 因为系统总是选择最小的可用文件描述符的值赋给fd2. 而这个时候的read(fd1, ...)就可能会造成一些不可预料的错误, 但不是代码逻辑上的,你可能会怀疑打开文件的问题。 */
}
这是一个风险。 虽然我们大部分人会回滚一下看看是不是已经释放了, 然后把释放语句切到后面。
但当我累了的时候, 我经常会犯这种低级错误。
养成个好习惯,至少可以减少这种风险。
阅读(613) | 评论(0) | 转发(0) |