我有一个 C 函数,它创建一个以空结尾的字符串并返回一个指向它的指针,还有相应的释放函数。
foreign import ccall unsafe "get_str" getStr :: IO CString
foreign import ccall unsafe "free_str" freeStr :: CString -> IO ()
我想从返回的 CString 中创建一个 Haskell 字符串,并尽快释放 CString。
do cStr <- getStr
str <- peekCString cStr
freeStr cStr
-- here str is used
在使用 str 之前释放 cStr 是否安全?换句话说,peekCString 是一次性创建 Haskell String,还是懒惰地创建?