回覆列表
  • 1 # 使用者183183892907

    Segment Fault太好除錯了,學會用偵錯程式就可以了,最難除錯的還是執行錯誤。可以看到,偵錯程式直接就告訴在22行了,然後我們加上斷點在那裡進行除錯然後我們列印我們感興趣的值,這裡最關鍵的自然就是l, r->next然後我們可以經過第23行,l->next = before以後(記住偵錯程式的n代表將要執行的下一行,而還沒有執行,所以我們這裡只執行了第23行,將執行第24行),r->next這個值就變化了,不再是之前的0x0,即null.而是0x1003000c0,也就是我們之前列印的before。而經過23行發生的是l->next = before;那麼,為什麼這一句執行後就會讓r->next變化呢?從結果來看,我們不僅把before賦予給了l->next,也把這個值給了r->next.那我們分析程式碼:

    第一行 r 為 l->next,即 l ----> r ----> 0x0然後第三行為 before = l; 即 (before) l -----> r -----> 0x0第四行為l = l->next; 即 before ------> (l) r -----> 0x0那麼也就是說我們23行的 l->next = before 其實也就是 r->next = before,所以也就得出了為什麼 r->next會變化了。即 before ----> (l) r -----> before.至於你工作的程式碼,是因為你之前就保留了r->next,即0x0。結論:學會使用偵錯程式呀,這樣你就會少問很多,節約很多時間,也不會憑空瞎想,亂猜。

  • 中秋節和大豐收的關聯?
  • 蘋果手機序列號dx開頭?