Получал удар в 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, поэтому любые указатели оценены!