看板 C_and_CPP 關於我們 聯絡資訊
拍謝特地再回一篇 我剛剛用了gdb 發現是死在 STL 的sort 裡面 原因是因為cmp function 沒寫好 雖然我不知道那樣寫為啥會死 導致sort 會在while loop 在裡面出不來 最後segmentation fault (話說這是我生平第一次進到STL implementation code 裡面看code -.-) 但是其實我真正想問的是cout 的行為為甚麼會影響到程式的結果 幾位大大一直叫我用gdb 但是我真的不知道gdb 這東西怎麼看cout 的行為= = 還有位大大叫我不要執著cout 但是我想問的就是cout 阿XD 如果那行是很明顯就動到記憶體的 或是迴圈出不來的 那也不用PO出來問 可能是OS或是archtecture 學得不好 不知道stdout 記憶體跟 其他記憶體是甚麼關係 sorry -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.244.131
purpose:GNU 跟微軟 cout 都公開原始碼了...除非你碰到好心人 05/25 23:52
akasan:其中提到 comp 要是 strict weak ordering 05/25 23:53
purpose:不然去追這個很累,只能你自己上 05/25 23:53
legnaleurc:因為 C/C++ 是一種隨便改個 compiler 參數 asm 就會不 05/26 00:05
legnaleurc:一樣的語言, 很可能只是因為 asm 的順序不一樣, 導致 05/26 00:06
legnaleurc:原本"有可能"掛掉的地方變成"一定"掛掉 05/26 00:07
legnaleurc:這次是 cout, 搞不好中間差個其他函式效果也一樣 05/26 00:08
legnaleurc:所以其他人才會叫你不要太執著在 cout 上 05/26 00:08
legnaleurc:C/C++ 的陰暗角落太多, debuger 和 testing 才是你可以 05/26 00:08
legnaleurc:相信的 05/26 00:08
akasan:昨天才踩過這邊 請相信我 是你的 cmp 寫爛了 05/26 00:10
singlovesong:感謝樓上兩位:DDD 05/26 00:11
james732:好怪,我追完也是 cmp 的問題,但卻看不出是哪裡爛了... 05/26 00:12
singlovesong:程式的問題是cmp cout的問題是l大說的那樣 我了囉 05/26 00:13
akasan:Effective STL - 21 05/26 00:13
singlovesong:不過我也看不出來cmp是哪裡爛就是了 -.- 05/26 00:13
james732:把 cmp 改成這樣就好了 http://pastie.org/1971972 05/26 00:20
james732:我好驚訝... 感謝akasan的提示 05/26 00:20
angleevil:我沒有想那麼多,我只是不相信cout是真正導正錯誤的原兇 05/26 08:46
angleevil:c/c++未定義行為超多的,所以只能小心再小心去debug 05/26 08:47
singlovesong:我也不相信 事實證明也是cmp沒寫好 05/26 09:43
singlovesong:我想知道的是cout為什麼會影響到結果而已 ^^" 05/26 09:43
angleevil:= =我比較想知道,為什麼你第一次用gdb有辦法找出bug所在 05/26 09:56
angleevil:我第一次用print 去看vector結果時,根本沒看到輸出內容 05/26 09:58
angleevil:後來找到call function和改進gdb的辦法 05/26 09:59
angleevil:如果你真的在意這個,可以去看effective c++ and more 05/26 10:00
angleevil:effctive c++ 和Effective STL.有天你會找出為什麼 05/26 10:01
singlovesong:因為可以看到進去STL sort 裡面 會無窮回圈 05/26 10:03
singlovesong:而原因就是cmp沒寫好 使得沒有滿足strict weak order 05/26 10:04
singlovesong:導致qsort的做法會有矛盾現象 所以loop loop 05/26 10:04
loveme00835:問題出在你cmp沒有做好測試就上戰場了, 這種問題打死 05/26 11:08
loveme00835:我都碰不到, 我甚至也幾乎忘了逐步偵錯了... 05/26 11:08
loveme00835:認識的很多人習慣就是一脫拉庫程式碼都寫完放一起跑, 05/26 11:11
loveme00835:然後就等著為了一個小問題偵錯兩三天 05/26 11:11
singlovesong:板大我想問cout是l大說的那樣嗎 05/26 11:23
xxxx9659:legnaleurc大說的很對阿 05/26 20:36
xxxx9659:以前有遇過 cout一次是對的 連cout兩次就錯 05/26 20:37
a5480277:就真的不一定 我遇過打一個break是錯的 連打兩個就對了.. 05/26 22:46
xatier:連打兩個有用嗎 =口= 第一個就break 掉啦 05/27 08:51
a5480277:這個舉例不好 不過就是那個意思啦..其它地方出包搞得鬼 05/27 12:32