不可访问未初始化或已释放的资源
2.3 ID_illAccess
访问未初始化或已释放的资源属于逻辑错误,会导致标准未定义的行为。
对于访问未初始化的局部对象,本规则特化为 ID_localInitialization;对于解引用未初始化或已被释放的指针,本规则特化为 ID_wildPtrDeref 、ID_danglingDeref。
示例:
void foo(const char* path, char buf[], size_t n) {
FILE* f;
if (path != NULL) {
f = fopen(path, "rb");
}
fread(buf, 1, n, f); // Non-compliant, ‘f’ may be invalid
fclose(f);
}
void bar(FILE* f, char buf[], size_t n) {
if (feof(f)) {
fclose(f);
}
fread(buf, 1, n, f); // Non-compliant, ‘f’ may be closed
}
相关
依据
ISO/IEC 9899:1999 7.19.3(4)
ISO/IEC 9899:2011 7.21.3(4)