Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13818
  • 博文数量: 7
  • 博客积分: 71
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-27 18:43
文章分类

全部博文(7)

文章存档

2011年(7)

我的朋友
最近访客

分类: C/C++

2011-03-28 16:00:27

编程中的好习惯,可能比某些刁钻的技巧来的更有意义。

在指针释放之后,给该指针赋值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) |
给主人留下些什么吧!~~