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

關於指標的使用出現怪問題

答題得分者是:pwipwi
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-04 17:20:32 IP:140.128.xxx.xxx 未訂閱
各位大大: 小弟我寫了一個小程式由於程式碼太多所以我放在網路上 http://student.thu.edu.tw/~s892924/test.rar 我的問題是我compiler會過~~可是在執行程式的時候卻在
 char *c0=new char[28];
這邊出現了錯誤~~ 不知道該怎麼debug; 我的程式是做輸入16位16進制的字串轉成2進制後做對照表裡的bit交換 然後輸出~~ 請問我這樣令什麼問題嗎??我先停在一個點用F8跑卻在
 char *c0=new char[28];
出現錯誤~ ===不知所措的新手敬上===
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-04 20:32:58 IP:211.76.xxx.xxx 未訂閱
hdilwy你好: 你的程式碼其中一行,配置的記憶體不足。結果造成寫入的資料超過,破壞了記憶配置表。因此接下來的new才會出了問題。 char *cp = new char[keyinput.Length() 1]; // 原來的沒有 1
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-04 21:03:46 IP:219.68.xxx.xxx 未訂閱
引言: hdilwy你好: 你的程式碼其中一行,配置的記憶體不足。結果造成寫入的資料超過,破壞了記憶配置表。因此接下來的new才會出了問題。 char *cp = new char[keyinput.Length() 1]; // 原來的沒有 1
to pwipwi: 非常感謝你看了我的程式,但是我還有一個問題,就是我輸出的時候都會輸出超過我原本長度,這是為什麼呢,而多出來的部分都是亂碼,我只要輸出01陣列就好了,而且我執行完按X後就會出現一個錯誤訊息,可以請教一下這是什麼意思,我要如何解決.在指標的使用我是第一次用.所以可能還要麻煩你多加指導了,謝謝 另外我的那個輸入是要輸入16進制的數字,我附上一個直接貼上就好: ABCDEEFF12345678
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-04 21:23:14 IP:221.169.xxx.xxx 未訂閱
我測試時沒有你說的問題,倒是有其他的問題:    你使用strcpy的時候要注意一件事 他會在字串的最後面補上一個'/0' 所以
        char *cp = new char[keyinput.Length() 1];
        strcpy( cp, keyinput.c_str() );
cp需要多留一個位置來填'/0',不然你想填入16個字元,但他實際上卻填了17個,超出你配置的記憶體空間,會發生不可預期的意外 後面也是
        char *cl=new char[56 1];
        char *c0=new char[28 1];
        char *d0=new char[28 1];
        char *subkey=new char[48 1];
改成這樣,跑出來的結果正常多了...
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-04 21:46:08 IP:219.68.xxx.xxx 未訂閱
哇~~原來是這樣子阿~~感謝您的指教~~    但是請恕我愚笨我想再問一些問題 就是你修改了後不知道你有沒有看輸出畫面 像這樣 這尾巴的垃圾該如何清掉阿! 另外我打Memo1->Lines->Add("c0 : " c0); 會出現錯誤的訊息,請問我是不是要先將c0轉成什麼形態才可以做這樣呢? 或是我該怎嚜做才能輸出 c0 : 010111100101...00111 的輸出呢! 我看F1看了看還是看不懂說~~
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-04 22:46:16 IP:211.76.xxx.xxx 未訂閱
C字串是以\0結束的。 最後面會出現亂碼是因為你沒有丟一個0在最後面。 以c1來說, 加上 c1[/*c1的size*/] = 0 就可以去掉後面的亂碼了 另外再試試: Memo1->Lines->Add(AnsiString("c0 : ") c0); 發表人 - pwipwi 於 2004/11/04 22:48:37
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-05 00:28:02 IP:219.68.xxx.xxx 未訂閱
其實我還有很多對於指標的疑問~~ 但是不知道從何問起~~ 如果有遇到問題在請教各位大大了~~ 再次感謝大大們鼎力相助
系統時間:2024-06-26 22:08:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!