Создание двоичного файла Erlang через NIF с данными, указывающими на символ * - PullRequest
3 голосов
/ 01 марта 2012

Я делаю интеграцию C-Erlang с использованием NIF, и у меня возникают некоторые проблемы с инициализацией Binary и добавлением символа *, указывающего на его данные.

Я делаю так:

ErlNifBinary *output_binary;
enif_alloc_binary(500, output_binary);

strcpy(output_binary->data, "Here is a string");
return enif_make_binary(env, output_binary); 

Есть идеи о том, что я не правильно делаю? У меня ошибка сегментации.

ОБНОВЛЕНИЕ : Я избавляюсь от ошибки сегментации. Но теперь я не могу вернуть двоичный файл Эрланга, содержащий String.

Используя enif_make_string с двоичным файлом, я получаю строку на Эрланге. Но когда я пытаюсь использовать enif_make_binary с двоичным файлом, я получаю такие вещи <<0,0,0,0,0,0,0,0,112,40,129,20>>, что мне нужно сделать, чтобы преобразовать?

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Только что обнаружил проблему.

Я должен был вернуть адрес двоичного файла, а не двоичного, поэтому просто return enif_make_binary(env, &output_binary); заставит его работать.

0 голосов
/ 01 марта 2012

Вы выделяете память для объекта output_binary, но output_binary->data указывает на недопустимый объект.Вы можете выделить память для output_binary->data следующим образом:

output_binary->data = malloc(sizeof "Here is a string");  // or enif_alloc
strcpy(output_binary->data, "Here is a string");
...