[問題] 鏈結串列用malloc配置記憶體

看板C_and_CPP作者 (斷月嵐)時間12年前 (2012/05/02 15:31), 編輯推噓3(3015)
留言18則, 4人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev c 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 可編譯但沒有東西跑出來 預期的正確結果(Expected Output): 印出資料裡的東西 錯誤結果(Wrong Output): 沒有東西跑出來 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/H9dBc 補充說明(Supplement): 第37行如果要讀取結束當條件要用什麼來弄 我記得有eof 但他會寫編譯錯誤 另外47行printf這樣寫會有問題嗎 (串鍊鏈結我都懂,但是沒次都沒有頭緒 = =) 另外txt裡的東西是這樣子 Lee 1 5000 10000 Lee 2 8000 10000 Lee 3 3000 10000 Lee 4 9000 10000 Lee 5 10000 10000 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.17.114 ※ 編輯: a80885057 來自: 123.240.17.114 (05/02 15:33)

05/02 15:46, , 1F
37行可以寫 !feof(infile)
05/02 15:46, 1F

05/02 15:54, , 2F
你第二個迴圈怎麼不用p ?? 用head那之後怎麼free?
05/02 15:54, 2F

05/02 16:09, , 3F
稍微修改一下 http://ideone.com/RbAF6
05/02 16:09, 3F

05/02 16:12, , 4F
糗了,我free的地方好像寫錯
05/02 16:12, 4F

05/02 16:20, , 5F
再次修改... http://ideone.com/JFE9r
05/02 16:20, 5F

05/02 23:39, , 6F
我想問一個問題,為什麼我有時候要宣告這串
05/02 23:39, 6F

05/02 23:40, , 7F
lnode *head, *tail,*p;
05/02 23:40, 7F

05/02 23:40, , 8F
有時候都會編譯錯誤
05/02 23:40, 8F
我不用p是因為我還不太懂p的操作方式 = =" 直覺就用head do{ p = head->next; free(head); head = p; }while(p != NULL); 這段我不太懂 p= head -> next; 是表達p指到next嗎?? 還有為什麼要用do-while 我聽助教說free表示其他東西可以用這個區塊 但沒有東西要用此區塊的話 裡面的資料不會改變 這樣不會變成無線迴圈嗎?? 因為p!=NULL ※ 編輯: a80885057 來自: 123.240.17.114 (05/03 03:01) ※ 編輯: a80885057 來自: 123.240.17.114 (05/03 03:01) ※ 編輯: a80885057 來自: 123.240.17.114 (05/03 03:02)

05/03 03:12, , 9F
如果如您所說你已經懂鏈結串列的話, 畫個簡單的鏈串圖,
05/03 03:12, 9F

05/03 03:13, , 10F
套用上面的code跟著推演一遍, 就知道它在幹麻了:)
05/03 03:13, 10F

05/03 05:05, , 11F
用 do-while 的話,在 head == NULL 的情況下
05/03 05:05, 11F

05/03 05:06, , 12F
會造成 access violation
05/03 05:06, 12F

05/03 11:12, , 13F
用free是個習慣,今天如果你的程式外面再多一層迴圈,而
05/03 11:12, 13F

05/03 11:14, , 14F
你沒有做free的話,你的程式需求的記憶體會越來越大,而
05/03 11:14, 14F

05/03 11:14, , 15F
導致memory leak
05/03 11:14, 15F

05/03 11:16, , 16F
那段我主要是用head和p兩個指標,從頭開始釋放記憶體
05/03 11:16, 16F

05/03 11:28, , 17F
用do-while的原因其實是我為了省code,do-while和while
05/03 11:28, 17F

05/03 11:30, , 18F
的差異在於何時做迴圈中斷的判斷
05/03 11:30, 18F
文章代碼(AID): #1FeEBcIB (C_and_CPP)
文章代碼(AID): #1FeEBcIB (C_and_CPP)