2017-03-20 16 views
1

を返された、私が呼び出したいC関数です:のchar *のデータを解放する方法luaJitは、ここでは、C関数から

char* decrypt(const char* str, int len) { 
    char* endata = malloc(len/2); 
    //assign 
    return endata; 
} 

ここでは、Luaのコンテンツです:

local ffi = require "ffi" 
local rsa = ffi.load("test.so") 

ffi.cdef[[ 
char* decrypt(const char* str, int len); 
]] 

local str = "256b5740ed16e5b15146816f77b0ab74de43d58ab367e9ac850642514f5cc4880e899a6a7775aa" 
local c_str = test.decrypt(str, 256) 
local lua_str = ffi.string(c_str, 128) 

は無料c_strをluajitう自動的に?

答えて

1

は自動的に無料です。

いいえ、そうではありません。 LuaJITは、このポインタの内容を何も知らない。

+0

ありがとう、私はファイナライザを登録するためにffi.gcを使うべきです、そして、LuaJITはffi.gc(c_str、ffi.c.free)のようにファイナライザを自動的に呼び出します。 – anwy

関連する問題