全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:899
推到 Plurk!
推到 Facebook!

傳回 new 的物件

答題得分者是:richtop
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-25 10:36:16 IP:140.125.xxx.xxx 未訂閱
#include    using namespace std;    /*使副程式中,以new的元件來回傳值.*/    int* max(int &p,int &q)
{
int *i=new int(p);//test
int *j=new int(q);
if(*i>*j)
{       delete j;
        return (i);}
else
{        delete i;;
        return (j);}
}    void main()
{
        int a=3,b=5;
        int *c=new int;
        c=max(a,b);//要和傳回的值相對應的形態
        *c=*c 10;
        cout<<*c<    請問大大....我剛才測了一下這個..但是這樣做不會就會使c的位址.沒有辨使用了嗎?沒辨法將原本c所配置的位址刪除了嗎?及為何把C的位址delete了,其內容仍沒有改變呢?而在副程式中的delete i,內容會改變呢?
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=67278
謝謝回答    Try it!
        
------
Try it!
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-25 12:13:39 IP:61.228.xxx.xxx 未訂閱
雲中鵝, 在main裡面,你先new了一個int給c,之後又在自訂函數裡面回傳一個new出來的int空間,並且指派給c,當你刪除c的時候,它刪除的是函數裡所new出來的那個空間,因此在main中所new出來的空間並未被得到釋放,這就型成memory leak的情況. 至於為何你在delete c之後,去讀取c值還讀的到原先的值,這是因為delete只是釋放掉這個記憶體空間,但是它並不會把記憶體的內容清除掉,因此在這塊記憶體還未重新指派給其他地方使用之前,你讀取到的值因該還是不會變的.
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-25 12:26:41 IP:221.169.xxx.xxx 未訂閱
引言:
        int *c=new int;
        c=max(a,b);//要和傳回的值相對應的形態
錯在這邊。 c 已經”持有”一塊記憶體。 而你又在 max 傳回時。要C去”持有”另一塊記憶體。 就像你一隻手拿了一顆橘子。 而你媽又要你用這隻手拿香蕉。 那你是不是要把橘子丟掉才能拿? 而當你香蕉吃完後。你就找不到橘子了。 橘子就永遠存在這個空間。而你卻無法使用了。^_^
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-25 12:46:42 IP:140.129.xxx.xxx 未訂閱
雲中鵝 您好:    我之前一直以為您是雲中"鶴"! 底下說明供您參考. < class="code"> int* max(int &p,int &q) { int *i=new int(p);//test int *j=new int(q); if (*i>*j) { delete j; return (i); } else { delete i;; return (j); } } void main() { int a=3,b=5; int *c=new int; c=max(a,b); //此行將造成原先c中所配置用來儲存一個整數的記憶體空間漏失掉! *c=*c 10; cout<<*c< RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2005/05/25 17:14:33
系統時間:2024-11-23 8:43:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!