我使用的Haskell這個Z3包,密切鏡(和利用的,通過Haskell的外部函數接口)的C API:https://hackage.haskell.org/package/z3分段故障哈斯克爾Z3 API
我得到一個分段錯誤,並設法將其降低到以下幾點:
mainx = do
print =<< intCheck [0..70]
intCheck :: [Int] -> IO [Int]
intCheck [] = return []
intCheck (x:xs) =
do
checking <- evalZ3 $ checkImpact x
print checking
return =<< intCheck xs
checkImpact :: Int -> Z3 Result
checkImpact r = do
reset
xSymb <- mkStringSymbol "x"
x <- mkConst xSymb =<< mkIntSort
trace ("asserting = " ++ show r) assert =<< mkEq x x
solverCheck
輸出是:
asserting = 0
Sat
asserting = 1
Sat
asserting = 2
Sat
...[omitted]
asserting = 45
Sat
asserting = 46
Segmentation fault: 11
通常情況下,最後斷言大約是46的地方,BU它的執行情況各不相同。我最好的猜測是內存沒有被正確釋放(我無法弄清楚爲什麼它會在稍微不同的地方停下來),但我不確定這是遞歸問題(在intCheck中),還是與z3 API。
在此先感謝您的幫助!
我會在haskell軟件包中打開一個bug報告,如果出現問題,讓他們處理上游問題 – jberryman
我已經完成了tha t: https://bitbucket.org/iago/z3-haskell/issues/12/possible-error-in-package 如果iago在那裏回覆,而不是在這裏,我會發布更新。 – Bill