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

動態宣告陣列問題

答題得分者是:khaupe
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-17 22:15:09 IP:211.76.xxx.xxx 未訂閱
請問各位大大: 我在全域宣告了一個指標float *a,然後在button中cole如下 int x=100; float *a=new flaot[x] 然後這100個陣列裡都儲存了數值之後... 在另一個button裡code Edit1->Text=FloatToStr(a[0]); 結果一直在上面那行出現bug,不知道問題出在哪?? 是動態陣列裡的值無法是全域的..還是...希望各位大大幫幫忙!!
khaupe
一般會員


發表:28
回覆:25
積分:15
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-17 22:37:27 IP:140.115.xxx.xxx 未訂閱
請問各位大大: 我在全域宣告了一個指標float *a,然後在button中cole如下 int x=100; float *a=new flaot[x] ~~~~~~~~~~~~~~~~~~~~~~ 這一行改成如下: a=new float[x] ; 然後這100個陣列裡都儲存了數值之後... 在另一個button裡code Edit1->Text=FloatToStr(a[0]); 結果一直在上面那行出現bug,不知道問題出在哪?? 是動態陣列裡的值無法是全域的..還是...希望各位大大幫幫忙!! 原因:你在Button1裡另外宣告了一個指標*a 而這個*a一離開Button1後就被釋放掉了 因此Button2裡抓到的是全域的*a 不幸的是你根本沒為這個全域的*a配置記憶體 所以就出錯啦~~~
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-17 22:37:42 IP:218.167.xxx.xxx 未訂閱
Allanx 你好: 照你的情況來看,如果想利用全域指標的話,那麼在button按下去的事件「函式內」
float *a = new flaot[x];
要修正為
a = new flaot[x];
因為你原來的寫法,a是宣告在函式中的,它的生存空間只在函式中(但是用new指令動態配置記憶體跟這無關),因此當你在另一個button的事件函式內要使用a時,用的是宣告為全域的指標,並且其指向位置unknow,當然會出錯。若還不清楚,參看 C Prime 3rd Ed. 第八章「生存空間與生命週期」,或再問吧~< > < >慢了15秒~~ 發表人 - arisaka_matsuri 於 2004/05/17 22:42:40 發表人 - arisaka_matsuri 於 2004/05/17 22:44:09
Allanx
一般會員


發表:13
回覆:20
積分:6
註冊:2003-10-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-17 23:40:33 IP:211.76.xxx.xxx 未訂閱
感謝khaupe arisaka_matsuri兩位大大的回應 原來是出了降的錯... 唉~~基礎要更加強ㄌ!!
系統時間:2024-05-18 14:47:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!