[問題] 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