好怪的記憶體錯誤.. - Linux

Table of Contents

我寫了一個程式,有使用到其他人寫得程式(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

--

All Comments

Candice avatarCandice2009-08-12
這種 error 不見得就是出現問題的那一行
Ivy avatarIvy2009-08-14
可試試 electric fence http://perens.com/FreeSoftware/
Isla avatarIsla2009-08-15
Sandy avatarSandy2009-08-17
無須重新編譯程式 只需要執行 valgrind your_program