關於new的使用的問題 |
答題得分者是:harpist
|
dominicx
一般會員 發表:6 回覆:10 積分:13 註冊:2007-05-07 發送簡訊給我 |
不好意思, 我要問個白痴的問題 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)這行拿掉就又可以了 難道不能先判斷該物件是否為空, 再給予記憶體嗎? |
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
<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 發送簡訊給我 |
|
Coffee
版主 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
如果我沒有記錯..
!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 發送簡訊給我 |
|
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
! 屬於 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 發送簡訊給我 |
喔喔...果然真的是太久沒用了..感謝指教..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,你應該要自己去作。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |