線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1304
推到 Plurk!
推到 Facebook!

關於new的使用的問題

答題得分者是:harpist
dominicx
一般會員


發表:6
回覆:10
積分:13
註冊:2007-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-23 10:31:12 IP:61.224.xxx.xxx 訂閱
不好意思, 我要問個白痴的問題 Orz||
小弟我在一個相當基本的地方出了點狀況
首先, 下面是我的程式碼
<textarea class="cpp" rows="10" cols="60" name="code">class ProjectivePixelCount{ public: int pixels; ProjectivePixelCount *next; }; void __fastcall TForm1::Button1Click(TObject *Sender) { ProjectivePixelCount *A,*temp; temp = A; for(int i=0;i<10;i ){ if(!temp) temp = new ProjectivePixelCount; temp->pixels = i; temp = temp->next; } } </textarea>

我在run的時候, temp->pixels = i; 這行出了問題, 說我violated to access memory........

不過我把if(!temp)這行拿掉就又可以了

難道不能先判斷該物件是否為空, 再給予記憶體嗎?

編輯記錄
dominicx 重新編輯於 2007-08-23 10:33:27, 註解 無‧
dominicx 重新編輯於 2007-08-23 10:33:49, 註解 無‧
dominicx 重新編輯於 2007-08-23 10:34:30, 註解 無‧
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-23 10:53:58 IP:59.105.xxx.xxx 未訂閱
<textarea class="cpp" rows="10" cols="60" name="code">class ProjectivePixelCount { public: int pixels; ProjectivePixelCount *next; ProjectivePixelCount(){next=NULL;}; }; void __fastcall TForm1::Button1Click(TObject *Sender) { ProjectivePixelCount *A,*temp; temp = NULL; A = NULL; for(int i=0;i<10;i ) { if(!temp) temp = new ProjectivePixelCount; temp->pixels = i; temp = temp->next; } } </textarea><br />
宣告指標後未必一定是如你所想的是NULL。
------
~§~迷時師渡,悟了自渡~§~
dominicx
一般會員


發表:6
回覆:10
積分:13
註冊:2007-05-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-23 11:01:05 IP:61.224.xxx.xxx 訂閱
假如不是Null的話, 不經過new不能取存取該記憶體?
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-23 11:06:09 IP:220.130.xxx.xxx 訂閱
如果我沒有記錯..
!Temp在語意上而言就已經不能代表「判斷Temp是否為NULL」,這一句代表的是「對Temp作bit operator not的運算」
所以!Temp只要「不為0(有時候是-1)不為NULL」,那麼就恆為True,
又宣告時指向非NULL,所以作! 之後非NULL與非0的機率很高,所以恆True

而宣告後指向非NULL是因為它並未被initialize,你應該要自己去作。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-23 12:23:00 IP:59.105.xxx.xxx 未訂閱
你要存取的記憶體是哪裡?是否存在呢?存取的後果? new Operator 的用途是什麼?
您思考一下

===================引 用 dominicx 文 章===================
假如不是Null的話, 不經過new不能取存取該記憶體?
------
~§~迷時師渡,悟了自渡~§~
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-23 12:37:58 IP:59.105.xxx.xxx 未訂閱
 ! 屬於 Logical Operator 是 logical negation 不是 bitwise Operator 。bitwise NOT 是毛毛蟲

===================引 用 Coffee 文 章===================
如果我沒有記錯..
!Temp在語意上而言就已經不能代表「判斷Temp是否為NULL」,這一句代表的是「對Temp作bit operator not的運算」
所以!Temp只要「不為0(有時候是-1)不為NULL」,那麼就恆為True,
又宣告時指向非NULL,所以作! 之後非NULL與非0的機率很高,所以恆True

而宣告後指向非NULL是因為它並未被initialize,你應該要自己去作。
------
~§~迷時師渡,悟了自渡~§~
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-23 14:06:16 IP:220.130.xxx.xxx 訂閱
喔喔...果然真的是太久沒用了..感謝指教..m(_ _)m

===================引 用 harpist 文 章===================
!屬於 Logical Operator 是 logical negation 不是 bitwise Operator 。bitwise NOT 是毛毛蟲

===================引 用 Coffee 文 章===================
如果我沒有記錯..
!Temp在語意上而言就已經不能代表「判斷Temp是否為NULL」,這一句代表的是「對Temp作bit operator not的運算」
所以!Temp只要「不為0(有時候是-1)不為NULL」,那麼就恆為True,
又宣告時指向非NULL,所以作! 之後非NULL與非0的機率很高,所以恆True

而宣告後指向非NULL是因為它並未被initialize,你應該要自己去作。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
系統時間:2024-05-02 13:29:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!