2012-03-01 3 views
2

NIF를 사용하여 C-Erlang 통합을하고 있는데 Binary을 초기화하고 해당 데이터를 가리키는 char *을 추가하는 데 문제가 있습니다. 내가 잘 안하고 대해숯불을 가리키는 데이터와 함께 NIF를 통해 Erlang 바이너리 만들기 *

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을 포함하는 Erlang 바이너리를 반환 할 수 없습니다.

enif_make_string을 binary.data와 함께 사용하면 얼랭에 문자열이 생깁니다. 하지만 enif_make_binary을 이진 파일과 함께 사용하려고하면이 파일이 변환됩니다. <<0,0,0,0,0,0,0,0,112,40,129,20>> 변환하려면 어떻게해야합니까?

답변

0

방금 ​​문제가 발견되었습니다.

이진수가 아닌 이진수의 주소를 반환해야하므로 return enif_make_binary(env, &output_binary);이 작동합니다.

0

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"); 
+0

답장을 보내 주셔서 감사합니다. 그러나 여기에서 작동하지 않았습니다. 아직 세분화 오류가 발생합니다. –

+0

또한'output_binary-> size'를'sizeof '로 설정해야합니다. 여기에 문자열 "'이 있습니다. – ouah

+0

감사합니다. 그것은 효과가 있었지만, 나는 String으로 Erlang 바이너리를 얻을 수 없었다. (나는 그 질문을 업데이트했다) –

관련 문제