[問題] 程式哪裡有錯誤

看板C_and_CPP作者 (馬神)時間13年前 (2012/09/13 15:16), 編輯推噓4(4014)
留言18則, 9人參與, 最新討論串1/1
#define ARRAY_SIZE 10240 char *get_init_array(); char *get_init_array() { char temp[ARRAY_SIZE]; int i; for (i=0;i<ARRAY_SIZE;i++) temp[i]=1; return temp; } 請問這段程式有什麼問題,要怎麼改正 這是面試的考題, 我的想法是此函數在宣告時要回傳指標變數,而回傳時不是指標變數,是這樣嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.66.214

09/13 15:18, , 1F
static char temp[ARRAY_SIZE];
09/13 15:18, 1F

09/13 15:19, , 2F
不加static的話 temp的生命期只存在此func區塊間
09/13 15:19, 2F

09/13 15:50, , 3F
如樓上所說,變數temp的life time只存在於函式內,所以當
09/13 15:50, 3F

09/13 15:50, , 4F
式結束後,temp就會被回收,所以return會出錯
09/13 15:50, 4F

09/13 15:51, , 5F
至於解決方法,static或者malloc都可以
09/13 15:51, 5F

09/13 15:58, , 6F
基本上 配置記憶體應該由主程式來做 不要讓函式代勞
09/13 15:58, 6F

09/13 16:03, , 7F
可是我實作時,不管有沒有static ,回傳值都是正確的
09/13 16:03, 7F

09/13 16:05, , 8F
所以只要是指標函數,變數就要加上static的意思嗎?
09/13 16:05, 8F

09/13 16:17, , 9F
把char temp[ARRAY_SIZE];移出含數之外
09/13 16:17, 9F

09/13 16:36, , 10F
你應該試著去了解各種語法會造成怎樣的物理意義
09/13 16:36, 10F

09/13 17:48, , 11F
置底十三問題的第五條
09/13 17:48, 11F

09/14 01:08, , 12F
老實說static這個建議蠻爛的....
09/14 01:08, 12F

09/14 01:49, , 13F
哪個地方的面試這麼簡單,可以說一下嗎
09/14 01:49, 13F

09/14 10:36, , 14F
要問的是語法錯誤、邏輯錯誤、還是設計上的錯誤呢?
09/14 10:36, 14F

09/14 12:24, , 15F
chchwy你可以search Singleton pattern
09/14 12:24, 15F

09/14 12:25, , 16F
我只是提供一個我打最少字的方法
09/14 12:25, 16F

09/14 12:26, , 17F
不然就把temp拉出去 init_arr(int* arr, int size)
09/14 12:26, 17F

09/14 20:36, , 18F
看了置底 似乎連範例都快一樣了 XD
09/14 20:36, 18F
文章代碼(AID): #1GKOXg54 (C_and_CPP)