[erlang-questions] Weird behaviuor of ei_x_free
Frans Schneider
schneider@REDACTED
Wed Mar 25 17:36:44 CET 2015
Works, Thanks.
I made the assumption that since ei_x_buff already is a pointer, I could
just pass it on.
Thanks
On 03/25/2015 04:19 PM, Sverker Eriksson wrote:
> On 03/24/2015 10:09 AM, Frans Schneider wrote:
>> Hi list,
>>
>> While writing a simple port program in C, I ran in a problem with
>> deallocating ei_x_buff results. After a few calls to the port,
>> ei_x_new_with_version would crash with a malloc error.
>> It turned out that when I replace the call
>>
>> ei_x_free(&result);
>>
>> with
>>
>> r = ei_x_free(&result);
>>
>> the problem is solved.
>> This is what the code looks like:
>>
>> static void process_helo(const byte *_buf, int _index_start) {
>> ei_x_buff result;
>>
>> ei_x_new_with_version(&result);
>> ei_x_encode_atom(&result, "ok");
>> write_port_msg(result);
>> ei_x_free(&result);
>> }
>>
>> Could somebody explain what is going on here?
>>
> I can try.
>
> Change your 'write_port_msg' function to take a *pointer" to ei_x_buff
> and change the call to pass a pointer to 'result':
> write_port_msg(&result).
>
> Your code passes 'result' by value and thereby gives write_port_msg a
> shallow copy
> of 'result'.
>
> /Sverker, Erlang/OTP
>
>
More information about the erlang-questions
mailing list