调用newForeignPtr时的核心转储

时间:2014-08-11 19:54:18

标签: haskell memory-management garbage-collection ghc ffi

以下计划:

{-# 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吗?如果那不是原因,那么导致问题的原因是什么,我将如何解决?感谢

0 个答案:

没有答案