以下计划:
{-# LANGUAGE ForeignFunctionInterface #-}
module Main where
import qualified Data.Vector.Storable as S
import Data.Vector.Storable.Internal
import Foreign.ForeignPtr
import Foreign.Marshal.Alloc
main = do
let (fp,_,_) = S.unsafeToForeignPtr $ S.fromList [1::Int]
p = getPtr fp
copy <- newForeignPtr finalizerFree p -- causes core dump
print "finished"
核心转储,并显示以下错误消息:
"finished"
*** Error in `./test2': free(): invalid size: 0x00007f4dffc06030 ***
Aborted (core dumped)
我认为它正在发生是正确的,因为两个数据值指向同一位内存(具体为p
),ghc然后尝试垃圾收集两次?如果是这种情况,有什么办法可以复制p
吗?如果那不是原因,那么导致问题的原因是什么,我将如何解决?感谢