2017-03-20 7 views
1

est ici la fonction C Je veux appeler:luajit comment libérer les données char * retour de la fonction c

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

ici est contenu 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) 

aurait luajit c_str gratuit automatiquement?

Répondre

1

serait luajit gratuitement c_str automatiquement?

Non, ce ne serait pas le cas. LuaJIT ne sait rien de ce qu'est ce pointeur.

+0

Merci, je devrais utiliser ffi.gc pour enregistrer le finaliseur, puis LuaJIT appellera automatiquement le finaliseur, comme ffi.gc (c_str, ffi.c.free) – anwy