Re: [問題] 加了cout 就不會segmentation fault 不 …

看板C_and_CPP (C/C++)作者 (~"~)時間15年前 (2011/05/25 23:46), 編輯推噓2(2039)
留言41則, 10人參與, 最新討論串1/1
拍謝特地再回一篇 我剛剛用了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

05/25 23:52, , 2F
GNU 跟微軟 cout 都公開原始碼了...除非你碰到好心人
05/25 23:52, 2F

05/25 23:53, , 3F
其中提到 comp 要是 strict weak ordering
05/25 23:53, 3F

05/25 23:53, , 4F
不然去追這個很累,只能你自己上
05/25 23:53, 4F

05/26 00:05, , 5F
因為 C/C++ 是一種隨便改個 compiler 參數 asm 就會不
05/26 00:05, 5F

05/26 00:06, , 6F
一樣的語言, 很可能只是因為 asm 的順序不一樣, 導致
05/26 00:06, 6F

05/26 00:07, , 7F
原本"有可能"掛掉的地方變成"一定"掛掉
05/26 00:07, 7F

05/26 00:08, , 8F
這次是 cout, 搞不好中間差個其他函式效果也一樣
05/26 00:08, 8F

05/26 00:08, , 9F
所以其他人才會叫你不要太執著在 cout 上
05/26 00:08, 9F

05/26 00:08, , 10F
C/C++ 的陰暗角落太多, debuger 和 testing 才是你可以
05/26 00:08, 10F

05/26 00:08, , 11F
相信的
05/26 00:08, 11F

05/26 00:10, , 12F
昨天才踩過這邊 請相信我 是你的 cmp 寫爛了
05/26 00:10, 12F

05/26 00:11, , 13F
感謝樓上兩位:DDD
05/26 00:11, 13F

05/26 00:12, , 14F
好怪,我追完也是 cmp 的問題,但卻看不出是哪裡爛了...
05/26 00:12, 14F

05/26 00:13, , 15F
程式的問題是cmp cout的問題是l大說的那樣 我了囉
05/26 00:13, 15F

05/26 00:13, , 16F
Effective STL - 21
05/26 00:13, 16F

05/26 00:13, , 17F
不過我也看不出來cmp是哪裡爛就是了 -.-
05/26 00:13, 17F

05/26 00:20, , 18F
把 cmp 改成這樣就好了 http://pastie.org/1971972
05/26 00:20, 18F

05/26 00:20, , 19F
我好驚訝... 感謝akasan的提示
05/26 00:20, 19F

05/26 08:46, , 20F
我沒有想那麼多,我只是不相信cout是真正導正錯誤的原兇
05/26 08:46, 20F

05/26 08:47, , 21F
c/c++未定義行為超多的,所以只能小心再小心去debug
05/26 08:47, 21F

05/26 09:43, , 22F
我也不相信 事實證明也是cmp沒寫好
05/26 09:43, 22F

05/26 09:43, , 23F
我想知道的是cout為什麼會影響到結果而已 ^^"
05/26 09:43, 23F

05/26 09:56, , 24F
= =我比較想知道,為什麼你第一次用gdb有辦法找出bug所在
05/26 09:56, 24F

05/26 09:58, , 25F
我第一次用print 去看vector結果時,根本沒看到輸出內容
05/26 09:58, 25F

05/26 09:59, , 26F
後來找到call function和改進gdb的辦法
05/26 09:59, 26F

05/26 10:00, , 27F
如果你真的在意這個,可以去看effective c++ and more
05/26 10:00, 27F

05/26 10:01, , 28F
effctive c++ 和Effective STL.有天你會找出為什麼
05/26 10:01, 28F

05/26 10:03, , 29F
因為可以看到進去STL sort 裡面 會無窮回圈
05/26 10:03, 29F

05/26 10:04, , 30F
而原因就是cmp沒寫好 使得沒有滿足strict weak order
05/26 10:04, 30F

05/26 10:04, , 31F
導致qsort的做法會有矛盾現象 所以loop loop
05/26 10:04, 31F

05/26 11:08, , 32F
問題出在你cmp沒有做好測試就上戰場了, 這種問題打死
05/26 11:08, 32F

05/26 11:08, , 33F
我都碰不到, 我甚至也幾乎忘了逐步偵錯了...
05/26 11:08, 33F

05/26 11:11, , 34F
認識的很多人習慣就是一脫拉庫程式碼都寫完放一起跑,
05/26 11:11, 34F

05/26 11:11, , 35F
然後就等著為了一個小問題偵錯兩三天
05/26 11:11, 35F

05/26 11:23, , 36F
板大我想問cout是l大說的那樣嗎
05/26 11:23, 36F

05/26 20:36, , 37F
legnaleurc大說的很對阿
05/26 20:36, 37F

05/26 20:37, , 38F
以前有遇過 cout一次是對的 連cout兩次就錯
05/26 20:37, 38F

05/26 22:46, , 39F
就真的不一定 我遇過打一個break是錯的 連打兩個就對了..
05/26 22:46, 39F

05/27 08:51, , 40F
連打兩個有用嗎 =口= 第一個就break 掉啦
05/27 08:51, 40F

05/27 12:32, , 41F
這個舉例不好 不過就是那個意思啦..其它地方出包搞得鬼
05/27 12:32, 41F
文章代碼(AID): #1DtIHaQg (C_and_CPP)
文章代碼(AID): #1DtIHaQg (C_and_CPP)