[問題] 關於函式回傳的值

看板C_and_CPP (C/C++)作者 (sionkozx)時間14年前 (2012/04/19 15:39), 編輯推噓0(008)
留言8則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 任何 問題(Question): 假設我自訂函式 char *string_concat(char *str1, char *str2) { // 計算所需的陣列長度 int length=strlen(str1)+strlen(str2)+1; // 產生新的陣列空間 char *result = (char*)malloc(sizeof(char) * length); // 複製第一個字串至新的陣列空間 strcpy(result, str1); // 串接第二個字串至新的陣列空間 strcat(result, str2); //free(result); return result; printf("11111111"); } 然後我在main裡面應用到上面的函式~ 根據函式結束裡面的參數值就會消失~ 就類似在這個函式裡面的length在main應該是讀不到的~ 問題來了~ 回傳的是指標~那指標所指到的值會消失嗎?? 我有試驗過是可以讀的回來~ 但是我不懂~不是函式裡面的參數都會跟著函式結束而消失嗎??? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.193.248

04/19 15:48, , 1F
用malloc動態配置的空間會保留到free釋放或程式結束
04/19 15:48, 1F

04/19 15:51, , 2F
是否函式結束~指標所指的空間就釋放了~
04/19 15:51, 2F

04/19 15:51, , 3F
雖然指標有回傳~但是空間有可能會被其他資料佔據!?
04/19 15:51, 3F

04/19 15:52, , 4F
如果是malloc配置的空間,不會因函式結束而釋放
04/19 15:52, 4F

04/19 15:52, , 5F
程式結束後malloc的空間如果沒有free會自動清除喔?
04/19 15:52, 5F

04/19 15:52, , 6F
你改成 char result[100]; 這個就會被釋放
04/19 15:52, 6F

04/19 15:53, , 7F
沒有呼叫free的空間,在程式結束的時候會被作業系統回收
04/19 15:53, 7F

04/21 00:17, , 8F
無論如何, 不要每行都下註解, 這樣表示你程式碼是多餘
04/21 00:17, 8F
文章代碼(AID): #1FZy4jd8 (C_and_CPP)
文章代碼(AID): #1FZy4jd8 (C_and_CPP)