☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

禁用柔性数组

6.4.3 ID_forbidFlexibleArray
目录 › next › previous

柔性数组(flexible array)指结构体最后不完整定义的数组成员,表示不占用空间的指针,这种数组由 C99 标准提出,不在 C++ 标准之内,在 C++ 代码中不应使用。

示例:

struct A {
    int len;
    int dat[];  // Non-compliant, flexible array
};

A* cpy(const A* p) {
    A* a = (A*)malloc(
        sizeof(A) + p->len * sizeof(int)
    );
    *a = *p;    // Data loss, only p->len is copied
    return a;
}

例中 *a = *p 这种拷贝赋值运算会漏掉数组的内容,而且数组不会计入 sizeof 的结果,易引起意料之外的错误,所以在 C 代码中也不建议使用柔性数组。

依据

ISO/IEC 9899:1999 6.7.2.1(16) ISO/IEC 9899:2011 6.7.2.1(18)

参考

MISRA C 2012 18.7
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.