[問題] function參數作靜態arrray size宣告

看板C_and_CPP作者 (卯)時間8年前 (2016/01/24 09:53), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/1
想請教關於變數宣告的問題 用靜態的方式宣告陣列,必須事先決定好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

01/24 09:58, , 1F
忘了提環境,Ubuntu 14.04, gcc 4.9.2
01/24 09:58, 1F

01/24 10:02, , 2F
hint: Variable-length Arrays
01/24 10:02, 2F

01/24 10:03, , 3F
ISO C99 作為正式標準有加入這個 feature, 但 C++ 沒有
01/24 10:03, 3F

01/24 10:04, , 4F
除此之外 GCC 本身有 GCC Extension 也支援 VLA
01/24 10:04, 4F

01/24 10:05, , 5F
我是不太喜歡這個做法,你要冒著 stack 爆掉的風險
01/24 10:05, 5F

01/24 10:05, , 6F
C++ 有 std::vector 至少還有機會讓你檢查
01/24 10:05, 6F

01/24 11:07, , 7F
感謝s大的keyword,我先去看一下
01/24 11:07, 7F

01/27 12:08, , 8F
用malloc一定是安全的吧?
01/27 12:08, 8F
文章代碼(AID): #1Mf2wigv (C_and_CPP)