On Tue, May 19, 2009 at 12:15:49PM -0400, Marc Feeley wrote:
On 18-May-09, at 10:30 PM, Taylor Venable wrote:
I have some binary data which is stored in an (unsigned char *) and I want to convert it into a u8vector. So I tried writing a conversion function like this:
The ___BEGIN_ALLOC_xxx macros defined in gambit.h allocate "movable" objects from the heap. They are meant to be called from code generated by the Gambit Scheme compiler, where ___hp (the heap pointer) is in scope. These macros should not be called from user code because some tricky invariants must be maintained when using movable objects.
Instead you should call ___alloc_scmobj and specify with the last parameter that a "still" object (which is not moved by the GC) is requested. This avoids some garbage collection issues.
So the code should look like this (untested):
Thanks for the explanation and code. This worked exactly, and I was able to use it to write the conversion in the other direction as well.