Re: [問題]關於陣列字串回傳主程式的問題

看板C_and_CPP作者 (Alan君)時間5年前 (2018/06/24 21:20), 編輯推噓3(305)
留言8則, 4人參與, 5年前最新討論串2/3 (看更多)
首先先簡單的介紹一下local變數 local變數指的是在某個區塊內宣告的變數(像是main,或是你的getrandom都是一個區塊) 宣告的變數會暫時放在stack中,離開區塊後就會被清掉了 所以你的name在離開了getrandom函式的時候,就會不見了 當然也沒辦法回傳給main囉 因為根本沒有這個東西,也當然接收不到 那處理的辦法目前我想到兩種 一種就是你的方式 在函式內跟記憶體要一個空間(也就是你的*r),再把name裡面的東西複製過去 (但是這樣的方式好像很不好,會造成記憶體洩漏? ) 另外一種就是在main裡面宣告好一個變數(譬如說k),然後當做getrandom的變數傳進去, 再放進去k,再回傳就可以了 我忘記是不是還有其他更好的辦法可以解決這個問題~如果我有想到再補上~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.9.165.211 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1529846415.A.633.html

06/24 22:11, 5年前 , 1F
沒有free才會memory leak,其實補個註解說明就好了
06/24 22:11, 1F

06/24 22:12, 5年前 , 2F
一個是在裡面跟系統要空間 另外一個是在外面先準備好空間
06/24 22:12, 2F

06/25 00:28, 5年前 , 3F
推1F 應該只要記得free(r)就不會memory leak了吧
06/25 00:28, 3F

06/25 00:30, 5年前 , 4F
然後我手上的書範例是用第二種 return都傳status是OK還是
06/25 00:30, 4F

06/25 00:32, 5年前 , 5F
ERROR 這樣寫好像比較嚴謹(?)
06/25 00:32, 5F

06/25 09:51, 5年前 , 6F
除非是在bg一直跑個不停的process,要不然只要terminate,
06/25 09:51, 6F

06/25 09:52, 5年前 , 7F
你allocate的heap一樣會被OS free掉,但一般習慣都會free
06/25 09:52, 7F

06/25 09:52, 5年前 , 8F
所以不見得會memory leak
06/25 09:52, 8F
文章代碼(AID): #1RBvgFOp (C_and_CPP)
文章代碼(AID): #1RBvgFOp (C_and_CPP)