luajit ffi通过char **到C函数



一直在luajit ffi刺伤,并遇到了一个好奇的问题。我有以下代码:

local ffi = require("ffi")
ffi.cdef [[
    int decode(char* encodedToken, char** payload);
]]
local lib = ffi.load("lib.so")
local function decode(encoded_token)
    local c_encoded_token = ffi.new("char[?]", #encoded_token, encoded_token)
    local c_token = ffi.new("char*[1]")
    lib.decode(c_encoded_token, c_token)
    local resonse = ffi.string(c_token[0])
    return response
end

基本上,共享对象具有解码传入令牌的方法,并将输出写入char** payload。怪异的部分是,当我运行decode函数的单个迭代时,此代码可行,但是当循环运行时,会导致Segmentation fault

这使我相信我的ffi.new("char*[1]")分配存在内存泄漏。我什至尝试用ffi.gc调用包装它,这也无济于事:

local c_token = ffi.gc(ffi.new("char*[1]"), ffi.free)
-- do stuff
c_token = nil

这是我第一次尝试FFI,因此任何指针都赞赏!

自己弄清楚了。显然,这是由于无效的终止c字符串占用一个字符。

这有效:

local c_encoded_token = ffi.new("char[?]", #encoded_token + 1, encoded_token)

相关内容

  • 没有找到相关文章

最新更新