不可释放非动态分配的内存
2.16 ID_illDealloc
释放非动态分配的内存会导致标准未定义的行为。
本规则是 ID_incompatibleDealloc 的特化。
示例:
void bar() {
int i;
....
free(&i); // Non-compliant, 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 5.3.5(2)-undefined
ISO/IEC 14882:2011 5.3.5(2)-undefined
参考
MISRA C 2012 22.2
SEI CERT MEM34-C