由函数参数定义的数组

时间:2015-10-07 08:25:36

标签: c arrays

我从未这样做过,但我不确定为什么以下数组定义错误。

我有这个示例代码:

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中的上述数组定义很危险?

1 个答案:

答案 0 :(得分:2)

在C99及更高版本中你可以分配可变长度数组(VLA)是危险的,无法判断分配是否成功。如果失败,可能的结果是崩溃 - 或者更糟糕的是,无声的数据损坏。

malloc不同,后者在无法满足请求时返回NULL