作者Nestarneal (涅斯)
看板C_and_CPP
標題[問題] 把const char[]當作引數傳遞
時間Thu Nov 10 12:48:11 2011
開發平台(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:合不合用。 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