我从未这样做过,但我不确定为什么以下数组定义错误。
我有这个示例代码:
typedef struct _SomeObjType {
int val;
...
} SomeObjType;
static SomeObjType *oObject = NULL;
oObject = malloc( sizeof(SomeObjType) );
oObject->val = 300;
static Err foo (SomeObjType *object) {
if(object == NULL)
return -1;
unsigned char table[object->val];
...
}
为什么foo
中的上述数组定义很危险?
答案 0 :(得分:2)
在C99及更高版本中你可以分配可变长度数组(VLA)是危险的,无法判断分配是否成功。如果失败,可能的结果是崩溃 - 或者更糟糕的是,无声的数据损坏。
与malloc
不同,后者在无法满足请求时返回NULL
。