[問題] 好怪的記憶體錯誤..

看板Linux作者 (蘇打)時間16年前 (2009/08/10 14:33), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
我寫了一個程式,有使用到其他人寫得程式(FLUTE,網路上公開的免費程式) 不知道為甚麼,使用他跑一些資料比較小的東西還OK 如果資料大了反而會錯 然而我不覺得是他固定array大小的關係 因為資料量並沒有超過他設定的上限 我用gdb的結果 Program received signal SIGSEGV, Segmentation fault. 0x000000000043646c in flutes_MD (d=Cannot access memory at address 0x7fffea46ec38 ) at ./include/FLUTE/flute.c:809 809 Tree flutes_MD(DTYPE d, DTYPE xs[], DTYPE ys[], DTYPE s[], DTYPE acc) 上文有寫到d=Cannot access memroy at address.... 後來我使用bt,查詢他上一行的資料 顯示d=p+1(此處p=9,故傳入時d應該為10) 不過有問題的地方在於,他的程式是call by value,亦即應該不會有上述的狀況 (有其他的case一樣p=9帶入並不會有問題,故應該不是value的關係) 我個人覺得應該是系統的關係 請問有沒有辦法強制一個程式執行的記憶體範圍呢? 感謝m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.138.145.212

08/11 13:56, , 1F
這種 error 不見得就是出現問題的那一行
08/11 13:56, 1F

08/11 13:57, , 2F
可試試 electric fence http://perens.com/FreeSoftware/
08/11 13:57, 2F

08/14 14:06, , 3F
08/14 14:06, 3F

08/14 14:07, , 4F
無須重新編譯程式 只需要執行 valgrind your_program
08/14 14:07, 4F
文章代碼(AID): #1AVxygFJ (Linux)