看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
LPH66:"abcdefg" 會放在一個固定的地方 所以不用你操心 11/10 12:58
LPH66:你把它想成是個靜態的空間就行了 11/10 13:00
tropical72:不會,不過何不直接拿 m_str 去 new ? 另vs下要查簡單的 11/10 13:11
tropical72:memory leak : http://pastie.org/2840100 ,不知 CLR 11/10 13:11
tropical72:合不合用。 11/10 13:12
Nestarneal:CLR編譯過不了,不過nativeC++可以過, 11/10 13:48
Nestarneal:我大概瞭解了...所以其實不用去管它就好了對吧~ 11/10 13:48
Nestarneal:沒用 m_str 去 new 是突然腦筋沒轉過來沒想到... 11/10 13:49
Nestarneal:謝謝囉 :) 11/10 13:49