[問題] 把const char[]當作引數傳遞

看板C_and_CPP (C/C++)作者 (涅斯)時間14年前 (2011/11/10 12:48), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) MS Visual Studio 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) .NET framework 問題(Question): 我想請問關於這個程式碼: http://pastie.org/2840019 我從 main() 把 "abcdefg" 這個 const char[] 傳到建構元接收, 接著建構元直接把 m_str 指向這塊資料。 所以在call f() 的時候會無法delete,因為不是用new建立的資料。 接著我把程式碼改成這樣: http://pastie.org/2840026 修改的是建構元的部分。 我會先 new 一塊新的空間,然後把傳入的資料都複製到 new 出來的這塊空間。 所以之後 call f() 的時候就可以順利 delete 。 在這邊我想請問: "abcdefg" 這個 const char[] 的資料是不是就發生了memory leak的現象? 還是說它其實跟一般的變數一樣,只是個區域變數, 只要 main() 結束以後它會自動消除,不用去處理它? 同樣的狀況如果是呼叫普通,非 member function 的一般函數, 將 "abcdefg" 傳入函數做處理以後回傳一些資料, 那麼 "abcdefg" 是不是也算是區域變數,所以不需要做處理? 還是說其實需要額外把 "abcdefg" 佔用的空間清理出來呢? 謝謝:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.24.48

11/10 12:58, , 1F
"abcdefg" 會放在一個固定的地方 所以不用你操心
11/10 12:58, 1F

11/10 13:00, , 2F
你把它想成是個靜態的空間就行了
11/10 13:00, 2F

11/10 13:11, , 3F
不會,不過何不直接拿 m_str 去 new ? 另vs下要查簡單的
11/10 13:11, 3F

11/10 13:11, , 4F
memory leak : http://pastie.org/2840100 ,不知 CLR
11/10 13:11, 4F

11/10 13:12, , 5F
合不合用。
11/10 13:12, 5F

11/10 13:48, , 6F
CLR編譯過不了,不過nativeC++可以過,
11/10 13:48, 6F

11/10 13:48, , 7F
我大概瞭解了...所以其實不用去管它就好了對吧~
11/10 13:48, 7F

11/10 13:49, , 8F
沒用 m_str 去 new 是突然腦筋沒轉過來沒想到...
11/10 13:49, 8F

11/10 13:49, , 9F
謝謝囉 :)
11/10 13:49, 9F
文章代碼(AID): #1EkrUE5H (C_and_CPP)
文章代碼(AID): #1EkrUE5H (C_and_CPP)