Erlang, passe un object nif entre des fonctions

J’écris un C nif code et dans la fonction new , il crée une structure de stack avec enif_alloc_resource et le renvoie. quand j’utilise la fonction enif_make_resources , elle retourne toujours <> dans erlang.

Voici mon code C:

 #include "erl_nif.h" static ErlNifResourceType *MEM_RESOURCE; typedef struct { int n; int ps; int pe; ERL_NIF_TERM *data; } Stack; Stack *new(ErlNifEnv *env, int size) { Stack *s = (Stack*) enif_alloc_resource(MEM_RESOURCE, sizeof(Stack)); s->n = size; s->ps = 0; s->pe = size - 1; s->data = enif_alloc(sizeof(ERL_NIF_TERM) * size); return s; } static ERL_NIF_TERM new_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { int size; if (!enif_get_int(env, argv[0], &size)) return enif_make_badarg(env); Stack *stack = new(env, size); ERL_NIF_TERM res = enif_make_resource(env, stack); enif_release_resource(stack); return res; } static ErlNifFunc nif_funcs[] = { {"new", 1, new_nif} }; static void cleanup(ErlNifEnv *env, void *obj){} static int load(ErlNifEnv *env, void **priv_data, ERL_NIF_TERM load_info){ MEM_RESOURCE = enif_open_resource_type(env, NULL, "mem_resource", &cleanup, ERL_NIF_RT_CREATE, 0); if (MEM_RESOURCE == NULL) return -1; return 0; } ERL_NIF_INIT(q4, nif_funcs, load, NULL, NULL, NULL) 

Maintenant, la fonction new_nif retourne toujours <> mais j’ai vérifié que la res n’est pas NULL !. Quel est le problème?