作者godman362 (卯)
看板C_and_CPP
標題[問題] function參數作靜態arrray size宣告
時間Sun Jan 24 09:53:45 2016
想請教關於變數宣告的問題
用靜態的方式宣告陣列,必須事先決定好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這樣的寫法,會不會有什麼問題?
還煩請先進給予指點,感謝
--
ˍˍ
很多人在即將失去的時候,不知他即將失去,最後他就真正失去 ▕天險▏
其實,一個不曾失去的人最可憐。因為,他永遠學不會什麼叫珍惜。▕刀藏▏
 ̄ ̄
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.71.154
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1453600428.A.AB9.html
→ godman362: 忘了提環境,Ubuntu 14.04, gcc 4.9.2 01/24 09:58
推 s25g5d4: hint: Variable-length Arrays 01/24 10:02
→ s25g5d4: ISO C99 作為正式標準有加入這個 feature, 但 C++ 沒有 01/24 10:03
→ s25g5d4: 除此之外 GCC 本身有 GCC Extension 也支援 VLA 01/24 10:04
→ s25g5d4: 我是不太喜歡這個做法,你要冒著 stack 爆掉的風險 01/24 10:05
→ s25g5d4: C++ 有 std::vector 至少還有機會讓你檢查 01/24 10:05
→ godman362: 感謝s大的keyword,我先去看一下 01/24 11:07
→ laladeer: 用malloc一定是安全的吧? 01/27 12:08