[问题] function参数作静态arrray size宣告

楼主: godman362 (萧青)   2016-01-24 09:53:45
想请教关于变量宣告的问题
用静态的方式宣告阵列,必须事先决定好array size
以便compiler决定要在这部份分配多少空间给该阵列
一般写法大概就像这样:
int a[100];
or
#define ARRAY_SIZE (100)
int a[ARRAY_SIZE];
如果是以传参数作为阵列大小的宣告的话,通常应使用动态阵列宣告,如:
void showA(int array_size)
{
int *ary_ptr;
ary_ptr = (int *)malloc(array_size * sizeof(int));
/* Do something */
......
......
free(ary_ptr);
}
不过如果直接用静态宣告法,实际上在测试时好像也可以正常运作,如:
void showB(int array_size)
{
int ary[array_size];
/* Do something */
......
......
}
想请问像showB function这样的写法,会不会有什么问题?
还烦请先进给予指点,感谢
楼主: godman362 (萧青)   2016-01-24 09:58:00
忘了提环境,Ubuntu 14.04, gcc 4.9.2
作者: s25g5d4 (function(){})()   2016-01-24 10:02:00
hint: Variable-length ArraysISO C99 作为正式标准有加入这个 feature, 但 C++ 没有除此之外 GCC 本身有 GCC Extension 也支援 VLA我是不太喜欢这个做法,你要冒着 stack 爆掉的风险C++ 有 std::vector 至少还有机会让你检查
楼主: godman362 (萧青)   2016-01-24 11:07:00
感谢s大的keyword,我先去看一下
作者: laladeer (laladeer)   2016-01-27 12:08:00
用malloc一定是安全的吧?

Links booklink

Contact Us: admin [ a t ] ucptt.com