不可重复释放资源
2.12 ID_doubleFree
重复释放资源会导致标准未定义的行为。
由于多种原因,资源管理系统难以甚至无法预先判断资源是否已被回收,一旦重复释放资源,可能会直接破坏资源管理系统的数据结构,导致不可预期的错误。
示例:
void foo(const char* path) {
FILE* p = fopen(path, "r");
if (p) {
....
fclose(p);
}
fclose(p); // Non-compliant, closed twice, undefined behavior
}
相关
依据
ISO/IEC 9899:1999 7.20.3.2(2)-undefined
ISO/IEC 9899:2011 7.22.3.3(2)-undefined
ISO/IEC 14882:2003 3.7.3.2(4)-undefined
ISO/IEC 14882:2011 3.7.4.2(4)-undefined