不可失去对已分配资源的控制
2.1 ID_resourceLeak
对于动态分配的资源,其地址、句柄或描述符等标志性信息不可被遗失,否则资源无法被访问也无法被回收,这种问题称为“资源泄漏”,会导致资源耗尽或死锁等问题,使程序无法正常运行。
在资源被回收之前,记录其标志性信息的变量如果:
- 均被重新赋值
- 生命周期均已结束
- 所在线程均被终止
相关资源便失去了控制,无法再通过正常手段访问相关资源。
示例:
int fd;
fd = open("a", O_RDONLY); // Open a file descriptor
read(fd, buf1, 100);
fd = open("b", O_RDONLY); // Non-compliant, the previous descriptor is lost
read(fd, buf2, 100);
例中变量 fd 记录文件资源描述符,在回收资源之前对其重新赋值会导致资源泄漏。